【发布时间】:2011-12-12 21:28:07
【问题描述】:
首先,我需要说我是 Spring AOP 的新手(嗯,我是 AOP 的新手)。 在我的应用程序中,我有一个方面建议的服务类,直到这一点一切都很好。方面被触发,一切正常。但是我需要从我的角度调用该服务方法,并且存在问题。我的方面(逻辑上)在 StackOwerflow 错误时为每个调用和每个结束触发。
可以防止那个方面循环吗?
我有想法创建 IAspectSandbox 接口(或类),并且从实现此接口的类的方法调用不会触发方面。但我真的不知道如何实现这个目标:)
我的班级架构:
@Service
public class MyService
{
public BarObject update( FooObject item )
{
BarObject barObject = new BarObject();
// save FooObject to database and detect changes against old row
// information about fields, that was changed is in BarObject
return barObject;
}
}
--------------------------------------------------------------------------
@Aspect
public class MyServicePointcut
{
@Pointcut("execution(* cz.package.service.MyService.update(..))")
public void myServiceItemChanged() {}
}
--------------------------------------------------------------------------
@Component
@Aspect
public class PraceZadaniChangeAspect
{
@AutoWire
private MyService myService;
@AfterReturning("cz.package.pointcuts.MyServicePointcut.myServiceItemChanged()", returning = "returnVal")
public void execute( BarObject returnVal )
{
// do something with BarObject ... mostly check changes
// .....
// .....
// at the end I need to save changes
myService.update( returnVal.getFooObject() ); // after this call is this aspect triggered again. I know why, but I don't want to :)
}
}
【问题讨论】:
标签: spring aop spring-aop