Spring AOP not working, when the method is called internally within a bean

后端 未结 3 2099
轻奢々
轻奢々 2020-11-29 09:36

I have several Aspects coded in my application. All others works except for the following.

Service Interface

package com.enbiso.proj         


        
3条回答
  •  时光说笑
    2020-11-29 10:40

    Thank you jst for clearing the things up. Just for the information purposes for the future developer in SO, I'm posting the full answer to this question


    Lets assume that there is a bean from SimplePojo

    public class SimplePojo implements Pojo {
        public void foo() {
            this.bar();
        }
        public void bar() {
            ...
        }
    }
    

    When we call the method foo(), it reinvokes the method bar() inside it. Even thought the method foo() is invoked from the AOP Proxy, the internal invocation of the bar() is not covered by the AOP Proxy.

    Proxy calls

    So eventually this makes, if there are any advices attached to the method bar() to not get invoked

    Solution

    Use AopContext.currentProxy() to call the method. Unfortunately this couples the logic with AOP.

    public void foo() {
       ((Pojo) AopContext.currentProxy()).bar();
    }
    

    Reference:

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies

提交回复
热议问题