快速业务通道

Spring自动代理机制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

Spring自动代理机制

时间:2011-09-09 残梦追月

我们一直使用ProxyFactoryBean来显式的创建AOP代理。但是在很多场合,这 种方式将会使编写配置文件的工作量大大增加;由于要从ProxyFactoryBean获得 代理对象,也会使应用和Spring之间的耦合度增加。下面介绍使用Spring提供的 自动代理机制来解决这类问题。

1、使用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_Test4.10的工程,添加Spring的IoC和AOP库后,新建一 aop.test包,再分别创建两个类TestBeanA和BeanB,添加MyMethod()方法,代码 如下:

代码

/** * */ 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!"); } }

Spring自动代理机制(2)

时间:2011-09-09 残梦追月

再创建前置通知类BeforeAdvice:

代码

/** * */ package aop.test; import java.lang.reflect.Method; import org.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:

代码

/** * */ package aop.test; import org.springframework.context.ApplicationContext; import org.springframework.context.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(); } }

Spring自动代理机制(3)

时间:2011-09-09 残梦追月

代码

<?xml version="1.0" encoding="UTF-8"? > <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="org.springframework.aop.framework.autoproxy. BeanNameAutoProxyCreator"> <property name="beanNames"> <list>

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号