【发布时间】:2016-01-10 06:09:40
【问题描述】:
我的项目正在使用 Spring web flow 2.4,我需要使用 Spring AOP 来建议流范围 bean 来处理诸如日志记录之类的方面要求。 这是方面类:
@Aspect
@Component
public class LogFlowEventExecutor {
@Pointcut("execution(public * com.xyz.app.flow.*FlowBean.*(..))")
private void flowFunction() {}
@Before("flowOperation()")
public void logFlowEvent(JoinPoint jp) throws Throwable {
//logic ignored
...
}
}
并在根WebApplicationContext中定义autoproxy:
<aop:aspectj-autoproxy />
以及每个单独的 -flow.xml 文件
<flow xmlns="http://www.springframework.org/schema/webflow"...>
<var name="abcFlowBean" class="com.xyz.app.flow.AbcFlowBean" />
...
</flow>
我使用相同的模式轻松地建议服务 bean 和控制器,但它不适用于流范围的 bean,方面永远不会执行。 我认为这可能与 JDK 动态接口代理有关,但是它也因 CGLIB 失败(已设置 proxy-target-class="true" 属性)。切入点从未被拦截。所以我怀疑 flow-scope bean 在实例化时从未正确代理过。
我尝试切换到 LTW,但它抛出了 NoSuchMethodError(bean 是从 weaveinfo 日志编织的)。也许最好单独为它打开另一个线程。
我的问题是,是否可以使用 Spring AOP 来建议一个流范围 bean 以及如何做到这一点?
【问题讨论】:
标签: java spring spring-webflow spring-aspects