1

私は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 アプリケーションについて何を変更する必要がありますか?それとも他に何かする必要がありますか?

4

0 に答える 0