java - 在运行时覆盖/禁用方面

标签 java spring-boot aspectj

在我的 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 方法,但我想禁用它的方面。

方面是通过 Spring XML 配置创建的,它也在我使用的 jar 内。

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

我尝试过:

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

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

最佳答案

您需要停止 spring boot 扫描此类...因为它必须配置为扫描此方面,否则它将不会拾取并应用该方面。

关于java - 在运行时覆盖/禁用方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52153340/

相关文章:

java - 未定义 [javax.persistence.EntityManagerFactory] ​​类型的合格 bean

java - 如何在运行时在 Spring Boot 中重新加载嵌入式 Tomcat?

java - Websphere 与 Oracle DB 部署错误 NosuchMethod

java - 如何使用 AspectJ weaver 自定义 Spring 注解

java - 使用 aspectj 分析选定的方法

java - 如何使用Java将生成的PDF文件保存到MySQL数据库?

java - 三星 Galaxy s3 上的旋转器问题

java - 如何在 GWT 客户端中获取本地主机服务器的响应?

java - Spring Boot 多个 servlet 错误

java - 切入点表达式 'abc(inString)' 包含不受支持的切入点原语 'call'