自动装配
@Autowired
- 可以标注在构造器、参数、方法、字段上。
- 当bean只有一个有参构造器时,可以省略标注。
- 在setter方法或者@Bean标注的方法参数,可以省略。
查找顺序
- 默认优先按照类型去容器中查找对应bean:applicationContext.getBean(BookDao.class);
- 如果找到多个相同bean,再将属性名作为bean的ID去容器中查找:applicationContext.getBean("bookDao");
使用
- 使用 @Qualifier("bookDao2") 明确指定要注入bean的ID(需要和@Autowired 配合使用);
- 自动装配默认一定要将属性赋值,没有找到就会报错;
a. 可以使用 @Autowired(required=false) 调整。 - @Primary:让spring进行自动注入的时候,默认使用首选的bean;
a. 也可以继续使用@Qualifier指定需要注入的bean的名字;
@Resource
JSR250 Java规范的注解。
默认按bean名称进行装配。
不支持 @Qualifier 、 @Primary、required=false 功能。
@Inject
JSR330 Java规范的注解。
使用的时候需要导入依赖:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
支持 @Qualifier 、 @Primary,但是不支持 required=false 功能。
Aware 注入spring 底层组件 & 原理
为什么需要 xxxAware?
用户自定义的bean 想要使用spring容器底层的一些bean(ApplicationContext, BeanFactory,xxx);
- 自定义bean实现 xxxAware;在创建对象时,会回调接口规定的方法,以注入相关 bean。
- xxxAware 功能———对应处理器——> xxxProcessor 。
Profile 环境定义
用途
spring提供的可以根据当前环境,动态激活和切换不同的组件的功能。
开发环境、测试环境、生产环境。
@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。
标注位置
- 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境。
- 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效。
- 没有标注环境标识的bean在,任何环境下都是加载的。
激活方法
- 使用命令行动态参数: 在虚拟机参数位置加载
-Dspring.profiles.active=test
- 代码的方式激活某种环境;
网友评论