条件付きで有効な Bean - 無効な場合は null
@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
ます。
条件付きの有効化および無効化された Bean
Feature1 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;
条件付きの有効化および無効化された Bean - Spring Config :
@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;
スプリングプロファイル
もう 1 つのオプションは、Spring プロファイルを使用して Bean をアクティブにすることです@Profile("feature1")
。ただし、有効な機能はすべて単一のプロパティにリストする必要があるspring.profiles.active=feature1, feature2...
ため、これはあなたが望むものではないと思います.