自动装配
spring利用依赖注入(DI),完成对IOC容器中各个组件依赖关系的赋值。
@Autowired(Spring独有的)
- 默认优先按照类型去容器中找对应的组件,也就是 applicationContext.getBean(Person.class);
- 如果找到多个相同类型的组件,再使用属性名称作为组件id去容器中查找也就是 applicationContext.getBean(“person”);
- 但是也可以使用
@Qualifier("person")
指定需要装配的组件的id,而不是使用属性名 - 自动装配默认一定要将属性赋值好,不然会报错,但是可以使用
@AutoAutowired
注解中的required
属性避免报错 -
@Primary
,该注解可以让spring进行自动装配的时候默认使用首选的bean,也可以继续使用@Qualifier
指定需要装配的bean的名字 -
@Autowired
可以标记在方法上,构造器上(组件只有一个有参构造器,可以省略@Autowired
注解)、参数上、这个时候参数都是从容器中获取参数组件的值。
@Resource(JSR250)、@Inject(JSR330)[Java规范注解]
-
@Resource
可以实现和@Autowired
相同的注解,但是默认是按照组件名称来进行装配的。无法支持@Qualifier
、@Primary
、required
注解。 -
@Inject
需要导入javax.inject包,和@Autowired
注解基本相同,没有required=fasle
功能
注入spring底层容器
- 自定义的组件如果要使用Spring容器底层的一些组件(
ApplicationContext
、BeanFactory
等等),这个时候自定义组件需要实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件,从而将Spring底层的一些组件注入到自定义的Bean中。xxxAware的功能都是通过xxxAwareProcessor实现。
@Profile
该注解指定组件在哪个环境下才能被住到容器中,如果不做指定,则所有环境都能注入。该注解可以标注到类,方法上。
- 加了环境标示的bean,只有在这个环境被激活时才能注册到容器中,默认环境为default
- 写在配置类上,只有在指定环境的时候,整个配置类才会生效
- 没有标注的bean,在任何环境下都会生效
- 修改环境的方法:
通过命令行参数 -Dspring.profiles.active = 环境名称