【问题标题】:Modify pointcut expressions at runtime using Spring AOP使用 Spring AOP 在运行时修改切入点表达式
【发布时间】:2015-04-01 19:25:00
【问题描述】:

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

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

有谁知道除了我的使用 Spring AOP 的方法之外是否还有其他方法可以实现这一点?我期待您的想法和意见!

编辑:如果可能的话,保持现有代码不变对我的解决方案很重要。所以在 bean 中添加或替换方法对我来说不是一个选择。

【问题讨论】:

  • 您是否碰巧找到了解决方案?

标签: java spring-aop


【解决方案1】:

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

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

理想的情况是它适用于一个豆子而不是一组豆子。

Around Aspect.

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

选择最适合您需求的。

【讨论】:

  • 感谢您的回答亚扎德!通过建议添加或替换一种方法,我猜你想修改例如服务 bean?对于我的解决方案来说,改变现有的 bean 很重要。对不起,我应该提到这一点。您知道您的解决方案是否也适用于 Spring 创建的代理?
  • 您不一定要更改 bean - 您更改配置来构造 bean。
  • 不幸的是,对于这个项目,我无法修改 Spring 配置。因此,我正在寻找一种使目标 bean 及其配置完全不受影响的解决方案。我只能操纵我的方面类...
  • @Yazad,我们可以用 Java 代码而不是 XML 进行注入和替换吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
相关资源
最近更新 更多