知识大全 Spring自动代理机制
Posted 知
篇首语:人行千里路,胜读十年书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring自动代理机制相关的知识,希望对你有一定的参考价值。
Spring自动代理机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
我们一直使用ProxyFactoryBean来显式的创建AOP代理 但是在很多场合 这种方式将会使编写配置文件的工作量大大增加 由于要从ProxyFactoryBean获得代理对象 也会使应用和Spring之间的耦合度增加 下面介绍使用Spring提供的自动代理机制来解决这类问题
使用BeanNameAutoProxyCreator
Spring提供的BeanNameAutoProxyCreator类允许我们通过Bean的name属性来指定代理的Bean 它暴露了java lang String[]类型的beanNames和 interceptorNames属性 beanNames可以指定被代理的Bean名字列表 支持 * 通配符 例如 *DAO 表示所有名字以 DAO 结尾的Bean interceptorNames指定通知(Advice)列表 或者通知者(Advisor)列表
下面通过一个例程来演示如何使用BeanNameAutoProxyCreator 在例子中 有两个Bean TestBeanA和BeanB 并在TestMain类中的main方法中调用其MyMethod()方法 自动代理将会在方法调用前自动的执行配置的前置通知 输出提示信息
新建一个名字为AOP_Test 的工程 添加Spring的IoC和AOP库后 新建一aop test包 再分别创建两个类TestBeanA和BeanB 添加MyMethod()方法 代码如下
代码 查看源代码copy to clipboard打印- /** * */ package aop test; /** * @author zhangyong * */ public class TestBeanA public void MyMethod() System out println( this getClass() getName() + MyMethod() is run! );
- /** * */ package aop test; /** * @author zhangyong * */ public class BeanB public void MyMethod() System out println( this getClass() getName() + MyMethod() is run! );
再创建前置通知类BeforeAdvice
代码 查看源代码copy to clipboard打印- /** * */ package aop test; import java lang reflect Method; import springframework aop MethodBeforeAdvice; /** * @author zhangyong * */ public class BeforeAdvice implements MethodBeforeAdvice public void before(Method method Object[] args Object target) throws Throwable System out println(method getName() + () 将要运行! );
最后创建含有main方法的测试类TestMain
代码 查看源代码copy to clipboard打印- /** * */ package aop test; import ntext ApplicationContext; import ntext support ClassPathXmlApplicationContext; /** * @author zhangyong * */ public class TestMain public static void main(String[] args) ApplicationContext ac = new ClassPathXmlApplicationContext( applicationContext xml ); TestBeanA beanA = (TestBeanA)ac getBean( TestBeanA ); beanA MyMethod(); BeanB beanB = (BeanB)ac getBean( BeanB ); beanB MyMethod();
在配置文件中配置Bean和自动代理Bean 完成后代码如下
代码 查看源代码copy to clipboard打印- <?xml version= encoding= UTF ?> <beans ………… > <bean id= TestBeanA class= aop test TestBeanA /> <bean id= BeanB class= aop test BeanB /> <bean id= BeforeAdvice class= aop test BeforeAdvice ></bean> <bean class= springframework aop framework autoproxy BeanNameAutoProxyCreator > <property name= beanNames > <list> <value>Test* </value> </list> </property> <property name= interceptorNames > <list> <value>BeforeAdvice </value> </list> </property> </bean> </beans>
运行主类 输出结果如下
可以看到 在主类TestMain中 我们是直接从Spring IoC容器中获取收管Bean而不是像以前那样从ProxyFactoryBean中获取代理 但是我们的前置通知BeforeAdvice仍然在TestBeanA对象的MyMethod()方法执行前被触发 这说明我们的自动代理正在工作
使用DefaultAdvisorAutoProxyCreator
DefaultAdvisorAutoProxyCreator允许我们只需定义相应的Advisor通知者 就可以完成自动代理 配置好DefaultAdvisorAutoProxyCreator受管Bean后 它会自动查找配置文件中定义的Advisor 并将它们作用于所有的Bean
修改例程 的配置文件 使用DefaultAdvisorAutoProxyCreator来完成自动代理 完成后配置文件代码如下(本例完整工程代码见例程 )
代码 查看源代码copy to clipboard打印- <?xml version= encoding= UTF ?> <beans …… > <bean id= TestBeanA class= aop test TestBeanA /> <bean id= BeanB class= aop test BeanB /> <bean id= BeforeAdvice class= aop test BeforeAdvice /> <bean class= springframework aop framework autoproxy DefaultAdvisorAutoProxyCreator /> <bean class= springframework aop support NameMatchMethod PointcutAdvisor > <property name= advice ref= BeforeAdvice /> <property name= mappedNames > <list> <value>*Method* </value> </list> </property> </bean> </beans>
运行主类输出结果如下
cha138/Article/program/Java/ky/201311/28048相关参考
Java代码 publicinterfaceIHello publicvoidhello(Stringname); Java代码 publicclassHelloImplimpleme
基于Spring实现seam形式的事件机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Sea
保险代理公司的退出机制保险专业代理公司的许可证到期的,或者公司解散、被依法吊销营业执照、被撤销、责令关闭或者被人民法院依法宣告破产的,保险专业代理公司应当从保险中介市场退出。《保险专业代理机构监管规定
Spring的自动装配 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 采用构造函数注入以及set
Spring自动装配的学习 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在xml配置文件中au
Spring与自动调度任务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近把以前设想做搜索引
<aop:config> <!<aop:advisorid=userManagerTxad
知识大全 Spring Autowire(自动装载)的一次实践
SpringAutowire(自动装载)的一次实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java动态代理机制综合分析及扩展 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java动态代
知识大全 Spring Autowire(自动装载)的一次实践[2]
SpringAutowire(自动装载)的一次实践[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下