我做了一个分析方法:
@Around("tld.mycompany.business.aspects.SystemArchitecture.inServiceLayer() && !tld.mycompany.business.aspects.SystemArchitecture.publicConstructor()")
public Object profileBusiness(ProceedingJoinPoint pjp) throws Throwable {
try {
long start = System.currentTimeMillis();
String name = pjp.getSourceLocation().toString() + " " + pjp.getSignature().getName();
Object output = pjp.proceed();
long elapsedTime = System.currentTimeMillis() - start;
if(elapsedTime > 100)
System.err.println("TimerAspect: Businessmethod " + name + " execution time: " + elapsedTime + " ms.");
return output;
} catch (Exception ex) {
ex.printStackTrace(System.err);
throw ex;
}
}
并将tld.mycompany.business.aspects.SystemArchitecture中的切入点定义为
@Pointcut("execution(public new(..))")
public void publicConstructor() {}
和
@Pointcut("within(tld.mycompany.business..*Impl) &&
!execution(private * tld.mycompany.business.*.dataType()) &&
!handler(java.lang.Exception)")
public void inServiceLayer() {}
我想分析服务层中不是构造函数和异常的所有方法(这样我就不会得到“不支持初始化(编译器限制)”和“不支持预初始化”)编译器限制)“警告”并忽略我在几个中得到的dataType()。
但是,我仍然收到有关构造函数和异常的警告。它似乎也建议任何Java方法,所以调试我的应用程序几乎是不可能的,因为我为每一行打了很多建议。 Eclipse告诉我,它仅为profileBusiness产品线提供了2747条建议。
显然我一定误解了什么,但是什么?我如何专门针对以Impl结尾的tld.mycompany.business层次结构中的所有方法(构造函数除外)?干杯
的Nik
答案 0 :(得分:3)
你的切入点的这一部分:
within(tld.mycompany.business..*Impl)
定位所有* Impl类中的所有连接点。这就是为什么你在每一行都看到建议标记。
您需要添加以下行:
execution(* tld.mycompany.business..*Impl.*(..))
另外,!handler(java.lang.Exception)没有意义,因为处理程序切入点引用catch子句(不包括执行切入点)。
最后,你的publicConstructor切入点对我来说似乎不对。您是否也想删除受保护的,私有的和包受保护的构造函数?