配置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注解