1.一个代理模式的实例 通过 Proxy类进行代理

wait.java

//定义一个接口
public interface wait {
void say();
}

//目标对象实现接口并重写方法
public class waiter implements wait {
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("先生");
} }
public class SayHelloBeforemale implements MethodBeforeAdvice {//实现相应增强类的接口
@Override
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
//arg0 是 目标类的方法 arg1是目标类的入参数 arg2是目标类实例 发生异常则抛给Throwable
// TODO Auto-generated method stub
System.out.println("hello");
}
}

UnitTest.java

public class UnitTest {
//实明变量
private SayHelloBeforemale male ;
private waiter wait;
private ProxyFactory xy;
@Before
public void init(){
//实例化并赋值
male = new SayHelloBeforemale();
wait = new waiter();
xy = new ProxyFactory();
//设置目标对象
xy.setTarget(wait);
//设置增强类对象
xy.addAdvice(male); }
@Test
public void test(){
//
waiter w = (waiter)xy.getProxy();
w.say();
}

2.通过spring的配置文件进行代理

  这个方法进行代理所需的类和上面的 wait接口 和 它的实现类waiter 还有sayhelloadvice类

  不同之处在于不是使用 ProxtyFactory来进行代理目标对象,而是通过Schema 的xml文件进行配置代理。

beans.xml

<bean id="sayhelloadvice" class="test3.SayHelloBeforemale"/>
<bean id="target" class="test3.waiter"/>
<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"
p:proxyInterfaces="test3.wait"
p:interceptorNames="sayhelloadvice"
p:target-ref="target"
/>

- target:代理的目标对象

- proxyInterfaces:代理所需要实现的接口,可以多个接口。该属性还有一个别名是Interfaces

- interceptorNames:需要植入目标对象的bean列表。采用bean的名称指定。这些bean必须实现类 org.aopalliance.intercept.MethodInterceptor

  或 org.springframework.aop.Advisor的bean ,配置中的顺序对应调用的顺序。

- proxyTargetClass:是否对类进行代理(而不是进行对接口进行代理),设置为true时,使用CGLib代理,且proxyInterfaces属性被ProxyFactoryBean忽略。

UnitTest.java

public class UnitTest {
@Test //测试在spring 通过ProxyFactoryBean 配置代理
public void test2(){
ApplicationContext a = new ClassPathXmlApplicationContext("test3/beans.xml");
wait w = (wait)a.getBean("waiter");
w.say();
}
}

spring-AOP-ProxyFactoryBean代理的实例的更多相关文章

  1. 死磕Spring之AOP篇 - Spring AOP自动代理(二)筛选合适的通知器

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  2. Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式

    Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...

  3. 死磕Spring之AOP篇 - Spring AOP自动代理(一)入口

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  4. 死磕Spring之AOP篇 - Spring AOP自动代理(三)创建代理对象

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  5. spring aop 动态代理批量调用方法实例

    今天项目经理发下任务,需要测试 20 个接口,看看推送和接收数据是否正常.因为对接传输的数据是 xml 格式的字符串,所以我拿现成的数据,先生成推送过去的数据并存储到文本,以便验证数据是否正确,这时候 ...

  6. Spring AOP动态代理原理与实现方式

    AOP:面向切面.面向方面.面向接口是一种横切技术横切技术运用:1.事务管理: (1)数据库事务:(2)编程事务(3)声明事物:Spring AOP-->声明事物   2.日志处理:3.安全验证 ...

  7. 什么是 Spring AOP 和代理

    https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9403056301388627935% ...

  8. spring AOP 动态代理和静态代理以及事务

    AOP(Aspect Oriented Programming),即面向切面编程 AOP技术,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装 ...

  9. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理. JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只 ...

  10. Spring Aop 动态代理失效分析

    1. Spring Aop 原理 Spring Aop 通过动态代理创建代理对象,在调用代理对象方法前后做增强. 2. Transactional, Async 注解失效? 当在动态代理方法中调用当前 ...

随机推荐

  1. 【小分享】Date对象封装,时间格式化函数time()

    今天再来分享下Date的应用知识点 先看效果,类似于php里边的time('yyyy-mm-dd')用法,但是我这里没有完全依照php的参数格式来,如果有需要稍微修改一下就行. 首先,明确需要用到的参 ...

  2. 二维码 iOS

    一:生成二维码 1.根据一个字符串生成一个二维码  根据 #import <CoreImage/CoreImage.h>这个框架写的 在按钮的点击事件写 @interface ViewCo ...

  3. C# 获取文件MD5与SHA1

    之前刚开始学习编程的时候,总想着自己写一些小软件小工具. 而这个就是经典的文件MD5校验,顺便加上了一个SHA1. 在网络上下载一些东西时,会有作者提供MD5值. 它的作用就在于我们可以在下载该软件后 ...

  4. jQuery validata插件实现(每周一插件系列)

    大家好,第一次写有点正规的博客,以前都是随手复制几下.为了打LOL,我写快点,代码我都复制在最下面了,并且写了大量的注释. 首先我写jquery插件,喜欢这么写(好处有很多,以后在讲,哈哈,看过jQu ...

  5. object c入门

    无意间看到Object C编写的程序,感觉蛮有意思的,记载下来,慢慢品味,也许会有用得上的时候.吼吼~~ 大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到 Interfac ...

  6. C语言——选择排序

    ---恢复内容开始--- 算法思想: n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空. ②第1趟排序 在无序区R[1..n]中选出 ...

  7. Excel与XML相互转换 - C# 简单实现方案

    Excel与XML相互转换 - C# 简单实现方案 在日常工作中,我需要将数据存储在Excel中进行数据分析和处理,然后再将数据转换为XML格式进行跨平台的数据交换.网上搜索Excel转换为XML的实 ...

  8. PHP链接Redis

    命令行下运行 redis-server.exe redis.windows.conf 此时,redis服务已经开启,然后我们可以再新开一个命令行,作为控制台 redis-cli.exe -h 127. ...

  9. (@WhiteTaken)UGUI中遇到的一些细碎的知识点

    最近接触Unity中UGUI的知识比较多,遇到的东西,就慢慢积累下来吧.用到就不用去网上找了. 1.Unity加载Sprite图片资源.在Unity中,我们可能会遇到,一张图片中,有多个UI,这时候导 ...

  10. iframe----摘抄出处未知

    1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...