【问题标题】:Using @Aspect with @Conditional将@Aspect 与@Conditional 一起使用
【发布时间】:2017-02-14 11:52:36
【问题描述】:

我想根据从属性文件中读取的值有条件地创建一个Aspect。 (它与分析有关,这就是为什么要选择性地使用)。

我尝试创建一个实现Condition 的类,因此实现了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

(项目依赖树有点“复杂”,所以更新库必须小心翼翼:))

【问题讨论】:

  • 它是 @Aspect 而不是 @Component.. 所以它可能没有被扫描,你甚至可能没有注释处理存在。

标签: java spring aspectj aspect


【解决方案1】:

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

来自文档:

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

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

所以你的问题应该通过将@Component 添加到你的 bean 并在需要时设置适当的组件扫描来解决。

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多