aop 问题(本类中调用 导致aop 、事务 失效)

1、 本类中 方法调用 ,被调用的方法没有进入 切面(即调用的不是 代理类,而是自身的原始类的方法);
public class OrganServiceImpl implements OrganService {
	public String getFoo(){
			return "此方法 有 aop ";
	}

	public String getOrganList(){
			this.getFoo();
			return "此方法 没有 aop ";
	}
}

前台 ajax请求 getOrganList() 方法, 切面无效;
如果 是其他类调用 getFoo, 切面有效;

原因:
   this.getFoo() ; 方法实际上只是单纯的调用了本类中的方法,并没有调用它的 代理类,所以 无法进入切面,
解决方法:
   想办法让 getOrganList() 调用 getFoo() 的代理类;
同理: 本类中 调用 有事务的方法 ,也将导致事务失效;(例:循环 保存)

public class OrganServiceImpl implements OrganService {
   public String getFoo(){
   		return "此方法 有 aop ";
   }

   public String getOrganList(){
   	//	this.getFoo();  // 调用 本身 的getFoo();
   		organServiceImpl.getFoo();  // 调用代理类的 getFoo() 方法
   		return "此方法 没有 aop ";
   }
   @Autowired
   private OrganServiceImpl organServiceImpl;
}

2、异常

 can not find proxy: set exposeproxy property on advised to make it available

当需要调用时,则调用接口((BeanClass) AopContext.currentProxy()).B();
如果在配置中将expose-proxy设置为true,则直接获取就可以了:

<aop:config expose-proxy="true">
// spring aop
<!-- 开启暴露Aop代理到ThreadLocal支持  -->
   <aop:aspectj-autoproxy expose-proxy="true"/>

https://blog.csdn.net/hong10086/article/details/78424481

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值