覆盖/禁用运行时方面

时间:2018-09-03 16:16:56

标签: java spring-boot aspectj

在我的spring-boot应用程序中,我对外部jar有依赖性,该外部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批注,通过该属性我可以控制建议中的逻辑,但我很好奇这是唯一的方法,或者可能是我遗漏了什么吗? / p>

1 个答案:

答案 0 :(得分:0)

您需要阻止spring boot扫描此类。因为必须将其配置为扫描此方面,否则它将无法启动并应用该方面。