Conditio應受啓用豆 - 空時禁用
@Component
@ConditionalOnProperty(prefix = "myApplication.features", name = "feature1", havingValue="true")
public class Feature1 {
//...
}
@Autowired(required=false)
private Feature1 feature1;
如果有條件Bean是一個控制器,比你將不需要自動裝配它,因爲控制器通常不注射。如果條件bean被注入,當它沒有被啓用時,你會得到一個No qualifying bean of type [xxx.Feature1]
,這就是爲什麼你需要使用required=false
自動裝配它。它將保持null
。
有條件啓用&殘疾人豆
如果特徵1 bean是在其他組件注入,您可以使用required=false
注入,或定義bean返回時,禁用該功能:
@Component
@ConditionalOnProperty(prefix = "myApplication.features", name = "feature1", havingValue="true")
public class EnabledFeature1 implements Feature1{
//...
}
@Component
@ConditionalOnProperty(prefix = "myApplication.features", name = "feature1", havingValue="false")
public class DisabledFeature1 implements Feature1{
//...
}
@Autowired
private Feature1 feature1;
有條件啓用&禁用豆類 - 彈簧配置:
@Configuration
public class Feature1Configuration{
@Bean
@ConditionalOnProperty(prefix = "myApplication.features", name = "feature1", havingValue="true")
public Feature1 enabledFeature1(){
return new EnabledFeature1();
}
@Bean
@ConditionalOnProperty(prefix = "myApplication.features", name = "feature1", havingValue="false")
public Feature1 disabledFeature1(){
return new DisabledFeature1();
}
}
@Autowired
private Feature1 feature1;
春型材
另一種辦法是通過彈簧的配置文件來激活豆:@Profile("feature1")
。但是,所有已啓用的功能都必須在單個屬性spring.profiles.active=feature1, feature2...
中列出,所以我相信這不是您想要的。
這是一個主要的痛苦。在我的公司,只要我們能保證它不會被調用,我們就可以將一半的代碼發佈到生產環境中。所以儘管Spring把所有東西連接在一起,它真的很重要嗎?唯一的其他選擇是在甚至使用之前創造技術債務的if/else。 –
彈簧配置文件? http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html您可以將類註釋爲僅適用於特定配置文件。活動配置文件可以在服務器啓動時設置。 –
非Spring http://ff4j.org/庫。 –