我没有为包中的所有方法调用我的@Around建议

时间:2010-07-29 15:21:34

标签: java spring aop aspectj

我在我的LoggingAspect类中有以下代码,我希望这可以运行我的方法,如

gov.ssa.rome.service.impl.save() gov.ssa.rome.dao.impl.save()

但无论如何它只运行一次。我不知道为什么。我已经使用autowire将dao连接到servcice层。我非常感谢你的帮助。

我该怎么做才能让所有应用程序流运行此方法以查看日志中的流程?

@Around("execution(* gov.ssa.rome..*.*(..))")
public Object log(ProceedingJoinPoint pjp) throws Throwable {

 System.out.println("aspect Around started");

        Object ret = pjp.proceed();

    System.out.println("aspect Around ended);

  return ret;
}

1 个答案:

答案 0 :(得分:2)

可以使用不同的技术创建方面。如果您的JDK代理是JDK代理,则它们仅适用于接口中定义的方法。如果它们是cglib代理,它们将适用于除最终方法之外的所有方法。我认为默认情况下spring会使用JDK代理,如果匹配的类实现了接口,那么也会使用cglib代理。

检查带有save方法的类是什么样的,以及save是否来自接口。您可以强制使用aspectjweaver代理以使一切正常,但它们需要一些字节码操作。我建议坚持使用JDK代理并在需要时创建/扩展接口。有关更多信息,请参阅弹簧文档AOP章节。