Spring注記-@Conditionalを使用して条件に従ってbeanを登録
5498 ワード
1.異なる条件に従って異なるbeanを生成する必要がある場合があり、@Conditional注釈を使用する必要があります.一般的な使い方の1つは、オペレーティングシステムのタイプに応じて、異なるbeanを登録することです.BeanConfig構成クラスに3つのbeanを追加します.
現在のコンテナのPersonクラスのインスタンスを表示します.
実行効果:
2.@Conditional注記を使用して、オペレーティングシステムによって異なるbeanを登録します.まずConditionインタフェースを実装し,3つのConditionインタフェースの実装クラスLinuxConditon,MacConditon,WindowsConditonを作成し,実行環境のオペレーティングシステムタイプを取得して判断する必要がある.
LinuxConditon:
WindowsConditon:
MacConditon:
BeanConfig構成クラスに@Conditional注記を付けます.
実行効果:
package io.mieux.config;
import io.mieux.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean(value = "zhangsan")
public Person getPerson() {
return new Person("zhangsan", 28);
}
@Bean(value = "linux")
public Person getLinux() {
return new Person("linux", 50);
}
@Bean(value = "windows")
public Person getWindows() {
return new Person("windows", 30);
}
@Bean(value = "mac")
public Person getMac() {
return new Person("mac", 24);
}
}
現在のコンテナのPersonクラスのインスタンスを表示します.
package io.mieux;
import io.mieux.bean.Person;
import io.mieux.config.BeanConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App04 {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
String[] beanNames = annotationConfigApplicationContext.getBeanNamesForType(Person.class);
for (String beanName : beanNames) {
System.out.println("beanName: " + beanName);
}
}
}
実行効果:
beanName: zhangsan
beanName: linux
beanName: windows
beanName: mac
2.@Conditional注記を使用して、オペレーティングシステムによって異なるbeanを登録します.まずConditionインタフェースを実装し,3つのConditionインタフェースの実装クラスLinuxConditon,MacConditon,WindowsConditonを作成し,実行環境のオペレーティングシステムタイプを取得して判断する必要がある.
LinuxConditon:
package io.mieux.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
// linux
public class LinuxConditon implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String operatingSystem = environment.getProperty("os.name");
if ("linux".equals(operatingSystem)) {
System.out.println("Operating System: " + environment.getProperty("os.name"));
return true;
}
return false;
}
}
WindowsConditon:
package io.mieux.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
// windows
public class WindowsConditon implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String operatingSystem = environment.getProperty("os.name");
if (operatingSystem.contains("Windows")) {
System.out.println("Operating System: " + environment.getProperty("os.name"));
return true;
}
return false;
}
}
MacConditon:
package io.mieux.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
// mac os
public class MacConditon implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String operatingSystem = environment.getProperty("os.name");
if ("Mac OS X".equals(operatingSystem)) {
System.out.println("Operating System: " + environment.getProperty("os.name"));
return true;
}
return false;
}
}
BeanConfig構成クラスに@Conditional注記を付けます.
package io.mieux.config;
import io.mieux.bean.Person;
import io.mieux.condition.LinuxConditon;
import io.mieux.condition.MacConditon;
import io.mieux.condition.WindowsConditon;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean(value = "zhangsan")
public Person getPerson() {
return new Person("zhangsan", 28);
}
@Bean(value = "linux")
@Conditional(value = {LinuxConditon.class})
public Person getLinux() {
return new Person("linux", 50);
}
@Bean(value = "windows")
@Conditional(value = {WindowsConditon.class})
public Person getWindows() {
return new Person("windows", 30);
}
@Bean(value = "mac")
@Conditional(value = {MacConditon.class})
public Person getMac() {
return new Person("mac", 24);
}
}
実行効果:
Operating System: Mac OS X
beanName: zhangsan
beanName: mac