我是Spring AOP的新手。
我已经为我的应用程序中的所有方法提出了方面建议,但它会引发异常。(我已经用grails尝试过了。)
ExceptionService.groovy
@Aspect
public class ExceptionService {
def logMessage(def message){
def expInstance = new LogMessage(message:message)
expInstance.save(flush:true)
}
@Pointcut("execution(* com.mypackage..* (..))")
def allActions(){}
@AfterThrowing(pointcut="allActions()", throwing="e")
def allActionAdvice(JoinPoint joinPoint, Throwable e){
def className = joinPoint.getTarget().getClass().getSimpleName()
logMessage(className+"\n"+e.message)
}
@Pointcut("execution(* org.apache.commons.logging.Log.error(..))")
def logErrorActions(){}
@Before(value = "logErrorActions()")
def logErrorActionAdvice(JoinPoint joinPoint){
def className = joinPoint.getTarget().getClass().getSimpleName()
logMessage("Error in "+className)
}
}
resources.groovy
beans = {
xmlns aop:"http://www.springframework.org/schema/aop"
aspectBean(com.mypackage.services.ExceptionService)
aop.config("proxy-target-class":true) {
}
}
在这里,它适用于应用程序内部发生的所有异常allActionAdvice()
。但它不适用于log.error(logErrorActionAdvice())
。
我在Google上研究了它,它告诉我们问题在于AOP和第三方依赖,比如编织。所以,我需要做方面编织(编译时编织)。但我没有找到任何好的例子。
我需要更改我的Grails应用程序以使用我的方面的编译时编织或者还有其他我需要做的事情吗?