1

我的 LoggingAspect 类中有以下代码,我希望它可以为我的方法运行,例如

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

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

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

@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;
}
4

1 回答 1

2

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

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

于 2010-07-30T09:08:02.200 回答