Bean的高级装配

配置profile bean

针对不同的环境需要配置不同的bean,Spring提供的解决方案是bean profile功能。首先将所有不同的bean定义到一个或多个profile中,然后根据激活的profile来决定创建哪个bean。

@Profile注解指定某个bean属于哪一个profile,只有该profile激活时,该bean才能被创建。

@Profile能被用在类级别上,也可以用在方法级别上。

可以将不同环境的bean定义在一个配置类中,使用@Profile("")指定其profile,表明只有在相应的profile激活时才会创建该bean。

在XML配置文件中一样可以这样配置。

没有声明在任一profile中的bean始终都会创建,与激活哪个profile没关系。

激活profile

Spring在确定激活那个profile时,依赖两个属性:spring.profiles.active和spring.profiles.default。

如果设置了active属性,它的值就是来确定激活哪个profile

如果没有设置active,Spring会查找default的值来确定激活哪个profile

如果active和default都没设置,Spring只会创建没有定义profile的bean

设置两个属性的方式:

  • 作为DispatcherServlet的初始化参数
  • 作为Wen应用的上下文参数
  • 作为JNDI条目
  • 作为环境变量
  • 作为JVM的系统属性
  • 集成测试类上,使用@ActiveProfiles设置

条件化的bean

@Conditional注解用来条件化配置bean,可以用到带@Bean的方法上,如果给定的条件结果为true,就会创建这个bean,否则忽略这个bean。

@Bean
@Conditional(MagicExistsCondition.class)
public MagicBean magicBean() {
    return new MagicBean();
}

处理自动装配的歧义性

只要一个bean匹配所需的结果时,自动装配才是有效的。

如果不仅有一个bean能够匹配结果的话,这种歧义性会阻碍Spring自动装配属性、构造参数或方法参数。

用首选标识bean

使用@Primary注解将其中一个可选的bean设置为首选,可以和@Component组合使用,可以和@Bean组合使用,告诉Spring在遇到歧义性时要选择的bean。

限定自动装配的bean

使用@Qualifier注解

猜你喜欢

转载自www.cnblogs.com/minguo/p/10964263.html