使用spring aop进不了切面(@Aroud)

本文介绍了在Spring AOP中遇到的切面无法正常工作的问题,即在同一个类内部,使用注解的方法无法被切面拦截。问题的本质是由于直接通过`this`调用方法时,未经过Spring的代理对象。解决方案是通过@Autowired注入自身服务,从而使用代理对象调用方法,确保AOP切面能够正确切入。了解Spring AOP的工作原理对于避免此类问题至关重要。
摘要由CSDN通过智能技术生成

spring aop进不了切面

现象

使用自定义切面的注解时,发现在同一个类中,调用其他使用了注解的方法,但是一直进不了切面。代码如下:

@Service
public class XxxService{
  

  public void mothodA () {
      mothodB();
  }

  @DataAuthority //自定义切面注解
  public void mothodB () {
     
  }
}

解决方法:

即直接使用mothodB()调用方法,这里其实使用的是this对象去调用的,而aop只有使用代理对象去调用才可

以。

@Service
public class XxxService{
  
  //直接注入对象(本类),即使用spring的代理对象,然后调用
  @Autowired
  private XxxService xxxService;

  public void mothodA () {
      xxxService.mothodB();
  }

  @DataAuthority //自定义切面注解
  public void mothodB () {
     
  }
}

本质

Spring Aop切面是通过动态代理实现的。如果通过this调用方法则没有经过代理。自然无法进入切面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值