Spring中@Autowired自动装配总结
自动装配
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 = 环境名称
上一篇:
IDEA上Java项目控制台中文乱码