我在我的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;
}
答案 0 :(得分:2)
可以使用不同的技术创建方面。如果您的JDK代理是JDK代理,则它们仅适用于接口中定义的方法。如果它们是cglib代理,它们将适用于除最终方法之外的所有方法。我认为默认情况下spring会使用JDK代理,如果匹配的类实现了接口,那么也会使用cglib代理。
检查带有save方法的类是什么样的,以及save是否来自接口。您可以强制使用aspectjweaver代理以使一切正常,但它们需要一些字节码操作。我建议坚持使用JDK代理并在需要时创建/扩展接口。有关更多信息,请参阅弹簧文档AOP章节。