在@Conditional中使用@Aspect

时间:2017-02-14 11:52:37

标签: java spring aspectj aspect

我想根据从属性文件中读取的值有条件地创建Aspect。 (这与剖析有关,这就是选择性使用的原因)。

我尝试创建一个实现https://jsfiddle.net/grinmax_/ep3am6xz/4/的类,因此我matches()方法允许我执行必要的验证并将输出设置为相应的Boolean,启用或禁用它。

@Aspect 
@Conditional(MyCondition.class)
public class MyAspect {
...
pointCuts, methods and etc...
...
}

事情是:Aspect实际上是由Spring实例化的,显然它不尊重@Conditional注释输出。

我在这里缺少任何警告吗?

版本:

Spring version: 4.1.4.RELEASE

AspectJ version: 1.7.3

(项目依赖树有点复杂'所以更新库必须带着一点点盐:) :)

1 个答案:

答案 0 :(得分:1)

如果您将方面注册为组件,则可以设法获得条件Aspect Behaviour,如@EnableAspectJAutoProxy配置中所述。

来自文档:

  

支持处理使用AspectJ的@Aspect注释标记的组件,类似于Spring的XML元素中的功能。用于@Configuration

     

请注意, @Aspect bean可以像任何其他一样进行组件扫描。只需使用@Aspect和@Component标记方面:

因此,只需将@Component添加到bean并在需要时设置正确的组件扫描即可解决您的问题。

例如:

@Aspect
@Component 
@Conditional(MyCondition.class)
public class MyAspect {
...
pointCuts, methods and etc...
...
}