环境与profile
Profile注解
单独使用时: 作用于类名,指定该类属于哪一个profile环境
与@bean
一起: 作用于方法,指定该bean属于哪一个profile环境
激活profile
设置 属性 spring.profiles.active。
- 作为DispatcherServlet的初始化参数;
- 作为Web应用的上下文参数;
- 作为JNDI条目;
- 作为环境变量;
- 作为JVM的系统属性;
- 在集成测试类上,使用@ActiveProfiles注解设置。
条件化bean
@Conditional
注解: 作用于类名上,与 Condition接口 配合。Condition
接口: 只有一个 matches方法,只有在该方法返回 true 时才会创建带有@Conditional
的bean。
通过这两个注解和接口的配合,可以下面措施来决定是否创建 被注解的bean。
- 检查环境变量是否存在指定的值
- 检查指定的bean是否存在
- 检查指定的资源是否存在
- 等等
样例 Profile
1 | ({ElementType.TYPE, ElementType.METHOD}) |
##自动装配歧义性
@Primary
, 与@bean
或者@Component
组合: 将有该注解的bean设为首选项@Qualifier
, 与@Autowired
组合: 指定注入哪个bean@Qualifier
, 与@Component
或@Bean
组合: 指定该bean生产的beanId
##bean的作用域
@Scope注解 与@Component
或@Bean
组合,表明bean的作用域。
其有以下四种值:
- 单例(Singleton):在整个应用中,只创建bean的一个实例。
- 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
- 会话(Session):在Web应用中,为每个会话创建一个bean实例。 使用场景: 购物车等
- 请求(Rquest):在Web应用中,为每个请求创建一个bean实例。
请求域和会话域的详细介绍 参见《spring实战》章节3.4.1 。
运行时值注入
引入外部值
- Value注解: 可以使用 属性占位符或者SpEL表达式。
- Environment 对象: 获取环境变量和判断运行profile
1 | public class Ad{ |
SpEL
- 使用bean的ID来引用bean;
- 调用方法和访问对象的属性;
- 对值进行算术、关系和逻辑运算;
- 正则表达式匹配;
- 集合操作。
属性占位符需要放到 “${ … }”之中
SpEL表达式需要放到 “#{ … }”中
例子
1 | -- 调用普通类的方法 |