2010-07-29 26 views
1

我有下面这段代码在我LoggingAspect类,我希望这对我的方法,如我@Around的建议没有被要求在包装

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

回答

2

方面可以使用不同的技术创建。如果您的应用程序是JDK代理,则它们只能用于在接口中定义的方法。如果他们是cglib代理,他们将为除最终方法之外的所有人员工作。我认为如果匹配类实现接口和cglib代理,默认情况下会使用JDK代理。

检查您的保存方法的类是什么样的,以及保存是否来自接口。您可以强制执行aspectjweaver代理以使所有内容都能正常工作,但它们需要一些字节码操作。我会建议坚持JDK代理并在需要的地方创建/扩展接口。有关更多信息,请参阅spring documentation AOP章节。