2

我做了一个分析方法:

@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 条建议。

显然我一定是误会了什么,但是什么?我如何才能使其成为 tld.mycompany.business 层次结构中以 Impl 结尾的类中的所有方法(构造函数除外)?

干杯

尼克

4

1 回答 1

4

这部分切入点:

within(tld.mycompany.business..*Impl)

针对所有类中的所有连接点*Impl。这就是为什么您在每一行都看到建议标记的原因。

您需要添加如下一行:

execution(* tld.mycompany.business..*Impl.*(..))

此外,!handler(java.lang.Exception)由于处理程序切入点指的是 catch 子句(不包括执行切入点),因此也没有意义。

最后,你的publicConstructor切入点对我来说似乎是错误的。难道你不想删除受保护的、私有的和包保护的构造函数吗?

于 2010-09-09T19:50:18.513 回答