博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用ProxyFactoryBean创建AOP代理
阅读量:6842 次
发布时间:2019-06-26

本文共 2130 字,大约阅读时间需要 7 分钟。

  hot3.png

1、使用ProxyFactoryBean代理目标类的所有方法

      
  
    
    
    
                 
          
              
com.gc.impl.TimeBookInterface
                             
          
              
                             
          
              
                  
log
              
                  

代码说明:

   ●       id为log的Bean,是程序中的Advice。

   ●       id为timeBook的Bean,是ProxyFactoryBean要代理的目标类。

   ●       id为logProxy的Bean,就是ProxyFactoryBean。

 

   ●       ProxyFactoryBean的proxyInterfaces属性,指明要代理的接口。

   ●       ProxyFactoryBean的target属性,指明要代理的目标类 ,这个目标类实现了上面proxyInterfaces属性指定的接口。

   ●       ProxyFactoryBean的interceptorNames属性,指明要在代理的目标类中插入的Adivce

   ●        ProxyFactoryBean还有一个proxyTargetClass属性,如果这个属性被设定为“true”,说明  ProxyFactoryBean要代理的不是接口类,而是要使用CGLIB方式来进行代理,后面会详细讲解使用CGLIB方式来进行代理。

注意: ProxyFactoryBean的proxyInterfaces属性只支持使用字符串的方式进行注入,不支持使用Bean的依赖方式进行注入。

 

如果ProxyFactoryBean 的proxyInterfaces 属性没有 被设置,但是目标类实现了一个(或者更多) 接口,那么ProxyFactoryBean 将自动检测到这个目标类已经实现了至少一个接口, 一个基于JDK的代理将被创建 。被实际代理的接口将是目标类所实现的全部 接口;实际上,这和在proxyInterfaces 属性中列出目标类实现的每个接口的情况是一样的。然而,这将显著地减少工作量以及输入错误的可能性。

 

通知需要实现这几个接口之一:

 

 

2、使用ProxyFactoryBean代理目标类的指定方法

 

在 上面的示例中,Advice会代理目标类的所有方法。如果要代理目标类的指定方法,则需要使用Spring提供的  org.springframework.aop.support.RegexpMethodPointcutAdvisor类。代理目标类的指定方法的 示例代码如下:

      
  
    
    
  
          
              
                             
          
              
.*doAuditing.* 
                    
  
            
              
com.gc.impl.TimeBookInterface
                      
              
                      
              
                  
logAdvisor
              
                  

代码说明:

   ●       在id为logAdvisor的Bean中设定Advice和要指定的方法。

   ●       把id为logProxy的Bean的interceptorNames属性值改为logAdvisor。

   ●       logAdvisor的advice属性指定Advice。

   ●       logAdvisor的patterns属性指定要代理的方法。“.doAuditing”表示只有doAuditing()方法才使用指定的Advice。

patterns属性值使用的是正则表达式,关于正则表达式的使用,下节将会进行讲解。

注意: 因为要使用正则表达式,所以要把spring-framework-2.0-m1\lib\oro目录下的

jakarta-oro-2.0.8.jar加入到ClassPath下

 

代理模式,JDK动态代理,SpringAOP来龙去脉

 (重要参考)

 

参考:

转载于:https://my.oschina.net/ChiLin/blog/515294

你可能感兴趣的文章
学习Linux决心书
查看>>
华为使用命令
查看>>
二、Python'核心编程(数字)
查看>>
javamail正文乱码
查看>>
poj2226精妙的构图
查看>>
ubuntu 13.10 创建root图形界面超级用户
查看>>
关于制定通信协议
查看>>
duilib 开源界面库
查看>>
ubuntu虚拟机 root用户
查看>>
License使用成本估算
查看>>
JS 文字闪烁效果实现
查看>>
我的友情链接
查看>>
PyDev for Eclipse 简介
查看>>
九九乘法表
查看>>
统一沟通-技巧-9-Lync 2010-Outlook 2010-自动配置-2-普通人员
查看>>
js/nodejs检测时间有效性
查看>>
IOS UITableView详解二性能优化 & LOL游戏人物展示
查看>>
nexus 7 恢复出厂设置后一系列问题
查看>>
关于jFinal Db.query与Db.find 的理解
查看>>
源码解读Saltstack运行机制之Job Runtime
查看>>