Spring AOP 自动创建代理
1、实现类介绍
package com.yyq.aop; public class Waiter {
public void greetTo(String name) {
System.out.println("waiter greet to " + name + ".");
} public void serveTo(String name) {
System.out.println("waiter serving to " + name + ".");
}
}
Seller业务类:
package com.yyq.aop; public class Seller {
public void greetTo(String name) {
System.out.println("seller greet to " + name + ".");
}
}
GreetingBeforeAdvice前置增强实现类:
package com.yyq.aop;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method; public class GreetingBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println(o.getClass().getName() + "." + method.getName());
String clientName = (String) objects[0];
System.out.println("Hi! Mr." + clientName + ".");
}
}
使用Bean名进行自动代理配置:
<bean id="waiterTarget" class="com.yyq.aop.Waiter"/>
<bean id="sellerTarget" class="com.yyq.aop.Seller"/>
<bean id="greetingAdvice" class="com.yyq.aop.GreetingBeforeAdvice"/>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"
p:beanNames="*Target"
p:interceptorNames="greetingAdvice"
p:optimize="true"/>
@Test
public void testAdvisor6(){
String configPath = "com\\yyq\\aop\\beans.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);
Waiter waiter = (Waiter)ctx.getBean("waiterTarget");
Seller seller = (Seller)ctx.getBean("sellerTarget");
waiter.greetTo("Peter");
seller.greetTo("Tom");
}
输出结果:
<bean id="waiterTarget" class="com.yyq.aop.Waiter"/>
<bean id="sellerTarget" class="com.yyq.aop.Seller"/>
<bean id="greetingAdvice" class="com.yyq.aop.GreetingBeforeAdvice"/>
<bean id="regexpAdvisor2" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"
p:pattern=".*greet.*"
p:advice-ref="greetingAdvice"/>
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
测试方法:
@Test
public void testAdvisor7(){
String configPath = "com\\yyq\\aop\\beans.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);
Waiter waiter = (Waiter)ctx.getBean("waiterTarget");
Seller seller = (Seller)ctx.getBean("sellerTarget");
waiter.greetTo("Peter");
waiter.serveTo("Peter");
seller.greetTo("Tom");
}
Spring AOP 自动创建代理的更多相关文章
- Spring Aop(十四)——Aop自动创建代理对象的原理
转发地址:https://www.iteye.com/blog/elim-2398725 Aop自动创建代理对象的原理 我们在使用Spring Aop时,通常Spring会自动为我们创建目标bean的 ...
- 死磕Spring之AOP篇 - Spring AOP自动代理(三)创建代理对象
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- Spring 中如何自动创建代理(spring中的三种自动代理创建器)
Spring 提供了自动代理机制,可以让容器自动生成代理,从而把开发人员从繁琐的配置中解脱出来 . 具体是使用 BeanPostProcessor 来实现这项功能. 这三种自动代理创建器 为:Bean ...
- 死磕Spring之AOP篇 - Spring AOP自动代理(一)入口
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- 死磕Spring之AOP篇 - Spring AOP自动代理(二)筛选合适的通知器
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- 死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- Spring3系列11- Spring AOP——自动创建Proxy
Spring3系列11- Spring AOP——自动创建Proxy 在<Spring3系列9- Spring AOP——Advice>和<Spring3系列10- Spring A ...
- Spring AOP 和 动态代理技术
AOP 是什么东西 首先来说 AOP 并不是 Spring 框架的核心技术之一,AOP 全称 Aspect Orient Programming,即面向切面的编程.其要解决的问题就是在不改变源代码的情 ...
- 深入理解Spring AOP之二代理对象生成
深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...
随机推荐
- Linux之整理bash命令类型
作业四:整理bash命令类型,验证寻找一个命令的优先级 类型 ==> alias ==> Compound Commands ==> function ==> build_in ...
- ES6_入门(1)_let命令
1. let声明变量只在let命令所在的代码区内有效. "use strict"; /*如果不加"use strict";会报错:Uncaught Syntax ...
- python测试开发django-50.jquery发送ajax请求(get)
前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...
- windows Docker Desktop 搭建mysql,mssql和redis服务
其实网上关于docker上搭建mysql的文章已经很多了,只是今晚自己搭建的时候遇到一些问题,记录一下 1.首先是pull image , docker pull mysql 2.启动服务 docke ...
- jvm理论-字节码指令
Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成. 基本数据类型 1.除了l ...
- Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
重装完成之后,还是有很多问题,比如触摸屏的驱动没了,你要接上去鼠标之后操作 由于Surface只有一个USB口,你接了鼠标,就没法接键盘,所以要开启屏幕的软键盘,右击任务栏,勾选显示触摸键盘按钮, ...
- gstreamer如何查看相关插件信息(src/sink)?
gstreamer及相关插件编译完成后,会输出gst-inspect可执行文件,相关信息如下: drwxrwxr-x yingc yingc 6月 : glib-/ drwxrwxr-x yingc ...
- 构建自己的 Smart Life 私有云(一)-> 破解涂鸦智能插座
博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml 原文链接:https://blog.wang ...
- Docker 国内仓库和镜像
Docker 国内仓库和镜像 由于网络原因,我们在pull Image 的时候,从Docker Hub上下载会很慢...所以,国内的Docker爱好者们就添加了一些国内的镜像(mirror),方便大家 ...
- 魔术方法__get()、__set()和__call()的用法
刚开始学习魔术方法时对__get().__set() 和__call()的用法和作用不是太了解,也有一些误解... 现在分享一下个人的理解,大家共勉一下: __get().__set() 和__cal ...