【发布时间】:2016-11-09 04:08:18
【问题描述】:
我使用 AOP 将监视器与业务逻辑分开。但是当我使用junit测试我的aop代码时,我发现执行方法B时不会触发AOP,而是执行方法A时会触发AOP。方法 B 调用方法 A。
我的伪代码如下:
@Aspect
public class TimeMonitor {
@Pointcut("execution( * MainClass.A(..))")
public void pointA();
@Around("pointA()")
Object monitorA(ProceedingJoinPoint jp ){
try{
jp.proceed();
}catch(Exception e){
logger.error("failed to execute A in TimeMonitor");
}
}
我的主要逻辑如下:
public class MainClass{
public String A(){
}
public String B(){
try{
A();//call method A
}catch(Exception e ){
logger.error("failed to execute A in Main class");
}
}
}
然后当我用 Junit 进行单元测试时:
public TimeMonitorTest{
@Test
public void TestA(){
//test code here
A();
//AOP method monitorA will be triggered;
}
@Test
public void TestB(){
B();
//AOP method monitorA will not be triggered;
}
}
那为什么我在MainClass中测试方法B时monitorA()没有被触发?
谁能帮帮我?
谢谢!!
【问题讨论】:
-
你到底是怎么调用 A();在TestA中
-
您可以重新格式化您的代码并为您的方法使用小写字母开头吗?
A()在 java 中看起来像构造函数而不是方法。还有你如何在你的测试课上打电话A()?你不应该先实例化MainClass,然后从中调用A()吗?我怀疑你的TimeMonitorTest是否可以编译。
标签: spring aop spring-aop