【问题标题】:How to advice flowscope bean in Spring webflow如何在 Spring webflow 中建议 flowscope bean
【发布时间】: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


    【解决方案1】:

    我通过编写 Flow Execution Listener 解决了这个问题,基本上 FlowExecutionListener 定义了许多回调方法,当在流执行生命周期过程中发生某些事情时将调用这些方法。因此,我创建了一个自定义侦听器类,它从 FlowExecutionListenerAdapter 扩展而来,它通过使用空方法体来实现所有方法并覆盖我感兴趣的内容,如果您想要对所有流范围 bean 进行全局回调,这几乎与 AOP 具有相同的效果。但如果你只需要拦截其中的几个,那就另当别论了。

    public class MyFlowExecutionListener extends FlowExecutionListenerAdapter{
        @Override
        public void eventSignaled(RequestContext context, Event event) {...}
        @Override
        public void transitionExecuting(RequestContext context, TransitionDefinition transition) {...}
        @Override
        public void viewRendered(RequestContext context, View view, StateDefinition viewState) {...}
        @Override
        public void exceptionThrown(RequestContext context, FlowExecutionException exception) {...}
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 2013-08-22
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多