spring Aop嵌套调用的解决办法
2018-03-05 14:52
841 查看
众所周知,Spring AOP在同一个类里自身方法相互调用时是无法拦截的。
问题示例代码
两个方法经过AOP代理,执行时都实现系统日志记录。单独使用say2时,没有任何问题。但say就有问题了。say里调用的say2方法是原始的,未经过AOP增强的。
spring Aop嵌套调用的解决办法
方法1,将自身注入到自身
示例代码
方法2,使用AopContext.currentProxy())来操作
问题示例代码
public String say(String a) { System.out.println("say a=" + a); say2(a); return a + a; } public String say2(String a) { System.out.println("say2 a=" + a); return a + a; }
两个方法经过AOP代理,执行时都实现系统日志记录。单独使用say2时,没有任何问题。但say就有问题了。say里调用的say2方法是原始的,未经过AOP增强的。
spring Aop嵌套调用的解决办法
方法1,将自身注入到自身
示例代码
package com.subject.spring; import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.AopProxy; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class OneBean { @Resource private OneBean oneBean; public OneBean() { System.out.println("构造器OneBean加载..." + this); } public String say(String a) { System.out.println("say a=" + a); //say2(a); oneBean.say2(a); // ((OneBean)AopContext.currentProxy()).say2(a) ; return a + a; } public String say2(String a) { System.out.println("say2 a=" + a); return a + a; } }
方法2,使用AopContext.currentProxy())来操作
package com.subject.spring; import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.AopProxy; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class OneBean { public OneBean() { System.out.println("构造器OneBean加载..." + this); } public String say(String a) { System.out.println("say a=" + a); //say2(a); ((OneBean)AopContext.currentProxy()).say2(a) ; return a + a; } public String say2(String a) { System.out.println("say2 a=" + a); return a + a; } }
相关文章推荐
- SpringAOP嵌套调用的解决办法
- SpringAOP嵌套调用的解决办法
- spring AOP中自身方法调用无法应用代理解决办法
- spring boot html调用js无效400解决办法
- 配置了 Spring AOP 但会调用两次的问题解决方法
- SpringBoot CGLIB AOP解决Spring事务,对象调用自己方法事务失效.
- 通过反射调用的类中使用Spring@Autowired自动装配的成员为空的解决办法不依赖servlet context获取Spring Application Contexts
- AOP无法切入同类调用方法的解决办法
- 关于调用Spring设置Quartz中动态执行时间解决办法
- PHP多层嵌套时调用路径混乱的解决办法
- spring aop编程与ssh集成的奇怪异常问题解决办法
- Xfire + Spring 远程调用webservice时提示注入的对象是空值,解决办法
- spring AOP 事务 与 Afterthrowing 冲突的解决办法
- 通过反射调用的类中使用Spring@Autowired自动装配的成员为空的解决办法
- Spring定时器调用Hibernate方法无法获得SessionFactory的解决办法
- SpringAOP嵌套调用的解决办法
- Jboss与Spring的aop注解@Aspect冲突的问题以及解决办法
- SpringAOP嵌套调用的解决办法
- Spring 全注解配置 bean 和 调用 (8) @Aspect注解不生效解决办法 和 no-static 的警告解决办法
- spring 加载配置文件application.properties,类里如何调用@Value的解决办法