3.1 环境与Profile
一般情况下,开发环境所需要的spring配置文件,例如dataSource数据源肯定与生产环境是不一样的,开发环境到生产环境或测试换几个时,我们都需要手动的去替换大量配置文件,非常麻烦,Spring的Profile为我们解决了这个问题,通过激活不同的profile来控制创建哪些bean。
下面举一个最简单的例子
创建两个不同的类,假设他们是不同的配置文件
|
|
Spring配置文件
|
|
指定profile进行测试
|
|
输出动物对象被创建了...
测试
修改
|
|
输出学生对象被实例化了
测试
在web开发中,我们可以使用以下方式切换和设置profile
需要依赖两个独立的属性:spring.profiles.active spring.profiles.default
如果设置了active,指定的profile会被激活。
如果没有设置active,指定的default会被激活。
如果都没有设置,只会创建没有在profile范围内的bean。
有多钟方式来设置这两个属性:
- 作为DispatcherServlet的初始化参数;
- 作为Web应用的上下文参数;
- 作为JNDI条目;
- 作为环境变量;
- 作为JVM的系统属性;
- 在集成测试类上,使用@ActiveProfiles注解设置;
3.2 条件化的bean
如果有这种需求:只有某个特定的环境变量设置之后,才会创建某个bean。
那么我们就需要这个功能。一般情况下不会用到,因此不做详细描述。
|
|
3.3 处理自动装配的歧义性
假设有一个Animal接口,Dog和Cat都是Animal接口的实现类,当我们使用@Autowired注入Animal时,Spring会因为不知道注入Dog还是Cat而报错。
解决方案:
|
|
|
|
|
|
3.4 运行时值注入
|
|
|
|
3.5 小结
本章是一些装配Bean的高级特性。包括使用profile初始化不同的beans;在spring4中使用@Conditional更加灵活细化的按条件初始化bean;使用@Qualifier解决@Autowired的歧义性;使用@PropertySource等一些列注解读取配置文件;其实还有SpEl表达式,用来动态的初始化bean,本文没有做讲解,在以后学习Spring-Security的时候会详细说明。