Spring在使用后置通知与环绕通知时遇到的问题
来源:互联网 发布:淘宝客 2016 qq空间 编辑:程序博客网 时间:2024/06/05 23:06
声明一个通知类 同时继承MethodBeforeAdvice、AfterReturningAdvice和MethodInterceptor
package com.zx.aop;import java.lang.reflect.Method;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.springframework.aop.AfterReturningAdvice;import org.springframework.aop.MethodBeforeAdvice;public class MyMethodAdvice implements MethodBeforeAdvice,AfterReturningAdvice,MethodInterceptor {@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("前置通知");}@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("后置通知");} @Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {// TODO Auto-generated method stubSystem.out.println("调用方法前");Object proceed = invocation.proceed();System.out.println("调用方法后");return proceed;}}
配置xml
<!-- 1.配置被代理的对象 --><bean id="test1Service" class="com.zx.aop.Test1Service"><property name="name" value='zx'></property></bean><!-- 2.配置通知对象 --><bean id="myMethodAdvice" class="com.zx.aop.MyMethodAdvice"></bean><!-- <bean id="MyMethodInterceptor" class="com.zx.aop.MyMethodInterceptor"></bean> --><!-- 3.配置代理对象 --><bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"><!-- 配置代理接口 代理对象将实现代理的接口 可以不设置--><!-- <property name="proxyInterfaces"><list><value>com.zx.aop.TestServiceTnter</value></list></property> --><!-- 4.把通知织入代理对象 可以是list --><property name="interceptorNames"><list><value>myMethodAdvice</value><!-- <value>MyMethodInterceptor</value> --></list></property><!-- 5.配置被代理对象 必须要有 --><property name="target" ref="test1Service"></property></bean>
运行代码
TestServiceTnter ts1=(TestServiceTnter) context.getBean("proxyFactoryBean");ts1.sayHello();输出
调用方法前
前置通知
Hello zx
后置通知
调用方法后
将前置通知后置通知与环绕通知类分开实现
前置加后置类
package com.zx.aop;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;import org.springframework.aop.MethodBeforeAdvice;public class MyMethodAdvice implements MethodBeforeAdvice,AfterReturningAdvice {@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("前置通知");}@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("后置通知");}}
环绕通知类
package com.zx.aop;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class MyMethodInterceptor implements MethodInterceptor {@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {// TODO Auto-generated method stubSystem.out.println("调用方法前");Object proceed = invocation.proceed();System.out.println("调用方法后");return proceed;}}
配置xml
<!-- 1.配置被代理的对象 --><bean id="test1Service" class="com.zx.aop.Test1Service"><property name="name" value='zx'></property></bean><!-- 2.配置通知对象 --><bean id="myMethodAdvice" class="com.zx.aop.MyMethodAdvice"></bean><bean id="MyMethodInterceptor" class="com.zx.aop.MyMethodInterceptor"></bean><!-- 3.配置代理对象 --><bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"><!-- 配置代理接口 代理对象将实现代理的接口 可以不设置--><!-- <property name="proxyInterfaces"><list><value>com.zx.aop.TestServiceTnter</value></list></property> --><!-- 4.把通知织入代理对象 可以是list --><property name="interceptorNames"><list><value>myMethodAdvice</value><value>MyMethodInterceptor</value></list></property><!-- 5.配置被代理对象 必须要有 --><property name="target" ref="test1Service"></property></bean>
运行代码不变 运行结果
前置通知
调用方法前
Hello zx
调用方法后
后置通知
更改xml中interceptorNames属性中两个通知类的顺序 再次运行 结果如下
调用方法前
前置通知
Hello zx
后置通知
调用方法后
0 0
- Spring在使用后置通知与环绕通知时遇到的问题
- spring的前置通知,后置通知,环绕通知
- spring 的环绕通知
- 9、前置、后置、环绕通知
- spring的AOP基础、前置通知与后置通知
- spring中前置通知与后置通知
- Spring前置通知与后置通知
- Spring框架——AOP前置、后置、环绕、异常通知
- spring_AOP前置通知&后置通知&返回通知&环绕通知
- SpringAOP环绕通知的使用
- spring的返回通知、异常通知、环绕通知、切面的优先级与重用切点表达式
- Spring-AOP-通知-环绕通知
- Spring 环绕通知
- Spring--AOP-环绕通知
- spring aop 环绕通知
- Spring AOP 环绕通知
- Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理
- Spring AOP-通知-后置通知
- Mybatis mapper.xml 中的resultMap用法
- 正则表达式简介及在C++11中的简单使用
- Tensorflow学习记录9--alexnet网络
- 【React全家桶入门之六】渲染用户列表
- hdu 5443 裸st表
- Spring在使用后置通知与环绕通知时遇到的问题
- Spark常用函数讲解之键值RDD转换
- 机器学习十大算法之-CART分类决策树、回归树和模型树
- 'range' object doesn't support item deletion
- 读书笔记(五)
- C++面试之GetMemory问题
- MyBatis--初级
- 关于java注释,修饰--方法
- 统计字符串中汉字的个数