<aop:aspectj-autoproxy expose-proxy=“true“ />解释

本文解释了SpringAOP中expose-proxy属性的作用,它允许在类内部方法调用时通过代理应用AOP增强。默认情况下,这种增强不应用于本地方法,但设置expose-proxy=true后,可以确保方法调用在同一个事务上下文中有AOP增强。
摘要由CSDN通过智能技术生成

大白话:当你对一个类的某一个方法进行了AOP增加,默认情况下,同类的其他方法无法调用增强后的方法,除非你在spring配置文件中设置了expose-proxy="true" ,让这个代理对象暴露在外面。

<aop:aspectj-autoproxy expose-proxy="true" />中的expose-proxy属性允许你通过AOP上下文访问当前目标对象的代理。这在某些特定的场景下非常有用,尤其是当你需要在目标对象内部方法调用中仍然走代理时。

默认情况下,当你在Spring管理的bean中调用本地方法时(即一个方法调用同一个类中的另一个方法),这个调用不会通过代理对象,也就是说,不会应用任何与该调用相关的AOP增强(如事务管理、安全检查等)。这是因为代理是基于拦截外部对bean的调用来工作的,而不是拦截bean内部的方法调用。

设置expose-proxy="true"后,Spring容器会在当前线程上下文中暴露这个bean的代理。这样,你就可以通过AopContext.currentProxy()来获取当前bean的代理,并通过这个代理来调用本地方法,以确保这些调用也能享受到AOP增强的好处。

这个功能在需要在同一个事务上下文中调用当前bean的另一个方法时特别有用,比如在需要确保方法调用应用了事务设置或是其他AOP增强时。

@Service
public class MyService {

    public void method1() {
        // 这个调用不会通过代理,因此不会应用AOP增强
        method2();
        
        // 这个调用会通过代理,因此会应用AOP增强
        ((MyService) AopContext.currentProxy()).method2();
    }

    public void method2() {
        // 一些逻辑
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值