序文
Springが条件に従ってBeanをアセンブルする方法を理解することは、開発のためのSpringbootの使用とソースコードの理解に役立ちます。
オープンソースの精神を受け継ぎ、技術知識を広める。
2つの@Conditional Assembly Bean
アイデアは次のとおりです
- Springは
@Conditional
、条件に応じてBeanをアセンブルするかどうかを実装するアノテーションを提供し、条件に従ってBeanを動的にアセンブルできるようにします。 @Conditional
アノテーションを条件Beanと一致させる必要があるかどうかを判断するには、条件インターフェースを実装して、matchesメソッドを書き換えるだけです。@Conditional
Beanをアセンブルする必要があるかどうかを判断するために、matchesメソッドによって返されたブール値に応じて
実装プロセスは次のとおりです
2.1ユーザークラス
ユーザークラスは、クラスにBeanが装備されているかどうかを構成するために使用されます
/**
* @Author lsc
* <p> </p>
*/
public class User {
private String userName;
// 省略 set get
}
复制代码
2.2条件実装クラス
RuntimeExistは、conditionContextを使用して条件を実装し、jvm環境変数を取得します(存在する場合はtrueを返し、それ以外の場合はfalseを返します)conditionContextには次のメソッドもあります
- getRegistry():BeanDefinitionRegistryを使用してBean定義を確認します。
- getBeanFactory():ConfigurableListableBeanFactoryを使用して、Beanが存在するかどうかを確認します。
- getEnvironment():環境環境変数
- getResourceLoader():ResourceLoaderによってロードされたリソース。
- getClassLoader():ClassLoaderによってロードされたクラス。
public class RuntimeExist implements Condition {
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
// 获取jvm 运行时环境
Environment environment = conditionContext.getEnvironment();
// 检查 jvm 运行时环境是否存在属性
return environment.containsProperty("java.runtime.name");
}
}
复制代码
2.3ユーザー設定
RuntimeExistのmatchesメソッドの戻り値がBeanのアセンブルであるかどうかに応じて、プロパティ名zszxzがここに設定され、テストが容易になります。
/**
* @Author lsc
* <p> </p>
*/
@Configuration
public class UserConfig {
@Bean
// 根据 RuntimeExist的 matches 方法的返回值 是否装配bean
@Conditional(RuntimeExist.class)
public User user(){
User user = new User();
user.setUserName("zszxz");
return user;
}
}
复制代码
2.4テスト
java.runtime.name属性がjvmランタイム環境に存在するため、アセンブリは成功し、zszxzが出力されます。
java.runtime.nameをjvm実行時に存在しない属性に変更すると、テストは例外を報告します。
@RunWith(SpringJUnit4ClassRunner.class)//创建spring应用上下文
@ContextConfiguration(classes= UserConfig.class)//加载配置类
public class ConditionTest {
@Autowired
User user;
@Test
public void test(){
// zszxz
System.out.println(user.getUserName());
}
}
复制代码
送信元アドレス:公開アカウントの要約記事