Spring实战Spring中条件化地创建bean

Posted Nothing Is Given.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring实战Spring中条件化地创建bean相关的知识,希望对你有一定的参考价值。

  1、@Conditional 为生成bean设置条件

  Spring 4中引入了一个新的注解[email protected],它用在有@Bean的方法上。

  如果给定条件计算结果为true,Spring会创建这个bean;如果为false,忽略。

@Bean
@Conditional(UserExistsCondition.class)
public User user(){
  return new User();  
}

  这里,@Conditional 中给定了一个条件class,这就是创建bean所要满足的条件。

  这个条件class可以是任意实现了Condition接口的类型(只需实现boolean matches()方法)。

 

  2、ConditionContext接口的功能(用到的一个重要接口)

  • 借助getRegistry()返回的BeanDefinitionRegistry检查bean定义;
  • 借助getBeanFactory()返回的ConfigurableListableBeanFactory检查bean是否存在,甚至探查bean属性;
  • 借助getEnvironment()返回的Environment检查环境变量是否存在以及它的值是什么;
  • 读取并探查getResourceLoader()返回的ResourceLoader所加载的资源;
  • 借助getClassLoader()返回的ClassLoader加载并检查类是否存在;

  

  3、AnnotatedTypeMetadata接口

  用来检查带有@Bean注解的方法上还有什么其他注解,即判断是否有、有哪些。  

 

  4、Spring 4中,@Profile注解进行了重构,使其基于@Conditional和Condition实现

 

以上是关于Spring实战Spring中条件化地创建bean的主要内容,如果未能解决你的问题,请参考以下文章

Spring实战407---Bean的作用域

Spring实战-bean作用域

Spring实战之装配Bean

《Spring实战》系列之Bean的装配-Days01

Spring实战读书笔记Spring装配Bean

Spring实战读书笔记Spring装配Bean