Spring AOP使用整理:自动代理以及AOP命令空间
2015-02-28 11:58
260 查看
三、自动代理的实现
1、使用BeanNameAutoProxyCreator
通过Bean的name属性自动生成代理Bean。
2、使用DefaultAdvisorAutoProxyCreator
DefaultAdvisorAutoProxyCreator允许我们只需定义相应的Advisor通知者,就可以完成自动代理。配置好DefaultAdvisorAutoProxyCreator受管Bean后,它会自动查找配置文件中定义的Advisor,并将它们作用于所有的Bean。
Spring提供了以下通知者:
RegexpMethodPointcutAdvisor
NameMatchMethodPointcutAdvisor
3、测试代码
四、基于aop命名空间的AOP
1、切面类MyAspect的源码
2、配置
1、使用BeanNameAutoProxyCreator
通过Bean的name属性自动生成代理Bean。
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Target</value> <!-- 名字以Target结尾的bean将被拦截 --> </list> </property> <property name="interceptorNames"> <list> <value>personAroundAdvice</value> </list> </property> </bean>
2、使用DefaultAdvisorAutoProxyCreator
DefaultAdvisorAutoProxyCreator允许我们只需定义相应的Advisor通知者,就可以完成自动代理。配置好DefaultAdvisorAutoProxyCreator受管Bean后,它会自动查找配置文件中定义的Advisor,并将它们作用于所有的Bean。
Spring提供了以下通知者:
RegexpMethodPointcutAdvisor
NameMatchMethodPointcutAdvisor
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> <bean id="nameMatchMethodPointcutAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="personAroundAdvice"/> <property name="mappedNames"> <list> <value>*info*</value> </list> </property> </bean>
3、测试代码
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:com/cjm/aop/beans.xml"); Person p = (Person)context.getBean("personTarget"); //此处获取的是具体的Bean,而不是代理Bean p.info();
四、基于aop命名空间的AOP
1、切面类MyAspect的源码
public class MyAspect { public void BeforeAdvice(JoinPoint point){ PersonImpl p = (PersonImpl)point.getTarget(); } public void AfterAdvice(JoinPoint point){ PersonImpl p = (PersonImpl)point.getTarget(); } public void AfterReturningAdvice(Object retValue){ System.out.println(retValue); } public void AroundAdvice(ProceedingJoinPoint point)throws Throwable{ System.out.println("AroundAdvice >> 目标对象 前"); point.proceed(point.getArgs()); System.out.println("AroundAdvice >> 目标对象 后"); } public void ThrowingAdvice(Throwable throwing)throws Throwable{ System.out.println(throwing); } }
2、配置
<!-- 切面受管Bean --> <bean id="myAspect" class="com.cjm.aop.MyAspect"/> <aop:config proxy-target-class="true"> <!-- 声明一个切面 --> <aop:aspect ref="myAspect" order="0"> <!-- 声明一个切入点 --> <aop:pointcut id="pointcut1" expression="execution(* com.cjm.aop..*(..))"/> <!-- 声明通知 --> <aop:before pointcut-ref="pointcut1" method="BeforeAdvice"/> <aop:after pointcut-ref="pointcut1" method="AfterAdvice"/> <aop:after-returning pointcut-ref="pointcut1" method="AfterReturningAdvice" returning="retValue"/> <aop:around pointcut-ref="pointcut1" method="AroundAdvice"/> <aop:after-throwing pointcut-ref="pointcut1" method="ThrowingAdvice" throwing="throwing"/> </aop:aspect> </aop:config>
相关文章推荐
- Spring AOP实践(一)动态代理和静态代理,为什么使用AOP
- aop的概念以及 cglib-nodep-2.1_3.jar第三方jia包动态代理使用
- spring aop自动代理注解配置失效问题及原理机制整理总结
- aop的概念以及 cglib-nodep-2.1_3.jar第三方jia包动态代理使用
- Spring5.0.4 AOP 使用AspectJ方式自动代理注解(@EnableAspectJAutoProxy)
- 代理自动配置文件-pac文件格式以及使用方式
- Linux下使用crontab命令以及Python脚本实现自动签到
- 使用Spring AOP 自动代理配置声明式事务
- Eclipse自动生成文件注释以及使用javadoc命令自动生成API文档
- (8) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- [原创]Aop之使用Autofac+Castle 自动注入服务且动态代理服务实现拦截(非MVC控制器拦截)
- 使用Spring AOP与Annotation所需的jar包以及命名空间操作
- 使用Spring AOP 自动代理配置声明式事务
- 使用Dreamhost空间下Shell命令的使用方法
- 使用DefaultAdvisorAutoProxyCreator实现spring的自动代理
- 自动生成xls文档系列01-HP-UNIX主机空间自动整理
- 《Pro Spring》学习笔记之Automatic Proxying自动AOP代理实例
- 关于Agent 角色代理使用(整理)
- 使用单独的命令处理类来处理命令消息(适用于有很多命令处理函数的对象,以及共享命令处理函数)
- 使用动态代理实现简单AOP