Spring AOP - @Before不执行

时间:2016-05-25 15:36:34

标签: java spring-aop pointcut

我正在尝试使用@Before建议和一个就地切入点表达式来实现一个简单的Spring AOP(v4)示例,但是不调用aspect方法。我有所有必需的依赖项(spring-aop,aopalliance,aspectweaver)。我做错了什么?

package com.xyz;

public class TestClass {
    @PostConstruct
    public void init() {
        test();
    }
    public void test() {
       ...
    }
}

方面:

@Aspect
@Component
public class MyAspect{
    @Before("execution(* com.xyz.TestClass.test())")
    public void beforeTest() {
       ...      
    }
}

1 个答案:

答案 0 :(得分:0)

未执行AOP的原因是因为TestClass.test()未在spring上下文中调用,而是从TestClass.init()进行简单/普通调用。

要测试您的设置,请将其修改为类似于下面的内容,以便TestClass.test()调用由spring管理

package com.xyz;

public class TestClass {

   public void test() {
     ...
   }
}

TestClass注入另一个班级AnotherTestClass并从那里调用test方法

package com.xyz;

public class AnotherTestClass {

   @Autowired
   private TestClass testClass;

   public void anotherTest() {
     testClass.test();
   }
}