我希望使用org.springframework.context.annotation.Condition接口在启动时禁用/启用我的一些@Configuration类。示例如下:
public class Condition implements ConfigurationCondition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//Gets the configuration manager from the context
RapidConfDocConfiguration.DocConf docConf = context.getBeanFactory().getBean(DocConf.class);
return docConf.isEnabled();
}
}
@Configuration
public class ConfDocConfiguration {
@Bean
public DocConf docConf() {
return new DocConf(true);
}
}
@Configuration
@Import(ConfDocConfiguration.class)
@Conditional({Condition.class})
public class RapidSwaggerConfiguration {
//Some configurations
}
我在这里遇到的问题是在实例化任何上下文之前执行Condition,然后'DocConf'还没有出现。如果我读取环境变量或类似的东西,条件运行良好。
那么,是否可以使用基于上下文的spring bean的这种条件?
答案 0 :(得分:2)
这是不可能的,因为您的DocConf类未作为配置加载,所有配置完成后都会创建@Bean注释bean。
为了实现这一点,您的DocConf类必须作为Spring配置添加到上下文中,因此通过@Bean从其他配置中包含它不起作用,因为非配置Bean仅在配置阶段之后创建。
考虑这篇文章:http://www.javarticles.com/2016/01/spring-configuration-condition-example.html
的另一个例子