使用Spring AOP在运行时修改切入点表达式

时间:2015-04-01 19:25:00

标签: java spring-aop

目前,我正在开发一个应该集成在任何基于Spring的Web应用程序中的应用程序,以使用户能够通过在运行时更改@Pointcut注释的值来定义动态切入点。我的主要目标是在应用程序仍在运行时切换某个方面的方法。

到目前为止,我已经开始使用Spring方法创建一个Spring应用程序上下文来定义一个方法,并通过Reflection更改注释值。但是,在我看来,这种变化并没有影响Spring创建的代理对象。在应用更改之前,仍然根据原始的@Pointcut值编织和调用该方面。 尝试这个的想法出现在我面前,因为根据" Spring in Action"和Spring文档这些代理对象是在运行时创建的。所以我得出结论,必须有一种方法来提供运行时更改。

有没有人知道除了我使用 Spring AOP 的方法之外还有另一种方法吗?我很期待你的想法和意见!

编辑:如果可能的话,保持现有代码不受影响的解决方案非常重要。因此,添加或替换bean中的方法对我来说不是一种选择。

1 个答案:

答案 0 :(得分:2)

有两种方法可以做你想做的事。

Spring Method Injection.(添加新方法)和Method Replacer(替换bean中的方法)

非常适用于一个关闭bean而不是一组bean。

Around Aspect.

如果您需要使用切入点并应用于一组未知数量的bean,则非常理想。重要提示:只有AROUND方面可以绕过实际的目标呼叫。这是通过简单地跳过(或有条件地调用)proceedingJointPoint.proceed(...)方法来完成的。

选择最适合您需求的产品。