【问题标题】:Override/disable Aspect on runtime在运行时覆盖/禁用 Aspect
【发布时间】:2018-09-03 16:16:55
【问题描述】:

在我的 spring-boot 应用程序中,我依赖于外部 jar,其中包含一个标有注释的类,该 jar 中的 @Aspect 被触发。

我有用 mu 自定义注解注解的 dao 方法:

@MyAnnotation
public void save(MyEntity entity)
{
   super.save(entity);
}

我有一个方面,它有一个建议,在调用 save() 方法后发送消息:

@Aspect
public class MySuperAspect
{
  @Autowired
  MessageSender messageSender;

  @Around("@annotation(MyAnnotation) && args(entity)")
  public void sendMessage(MyEntity entity)
  {
     messageSender.send();
  }
}

我确实需要 jar 中的 Dao 方法,但我想为其禁用方面。

Aspect 是通过 Spring XML 配置创建的,它也在我使用的 jar 中。

我可以修改方面本身,但这是不可取的,因为它不仅被我的 spring-boot 应用程序使用。

我试过了:

  • 在我的 spring-boot 应用程序中禁用 xml 配置扫描;
  • 将 xml 配置更改为注释并在扫描中对其进行过滤;
  • 在要被属性禁用的方面添加@ConditionalOnExpression 和@ConditionalOnProperty;

到目前为止,唯一可行的方法是添加带有属性的 @Value 注释,通过该属性我可以控制建议中的逻辑,但我很好奇这是唯一的方法还是我可能遗漏了什么?

【问题讨论】:

  • 您需要提供更多信息。这个方面有什么作用。定义触发它的切入点是什么。另外请务必分享一些代码。

标签: java spring-boot aspectj


【解决方案1】:

您需要阻止 spring boot 扫描此类...因为必须将其配置为扫描此方面,否则它将无法拾取和应用方面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多