Spring中@Autowired自动装配总结

自动装配

spring利用依赖注入(DI),完成对IOC容器中各个组件依赖关系的赋值。

@Autowired(Spring独有的)

  1. 默认优先按照类型去容器中找对应的组件,也就是 applicationContext.getBean(Person.class);
  2. 如果找到多个相同类型的组件,再使用属性名称作为组件id去容器中查找也就是 applicationContext.getBean(“person”);
  3. 但是也可以使用@Qualifier("person")指定需要装配的组件的id,而不是使用属性名
  4. 自动装配默认一定要将属性赋值好,不然会报错,但是可以使用@AutoAutowired注解中的required属性避免报错
  5. @Primary,该注解可以让spring进行自动装配的时候默认使用首选的bean,也可以继续使用@Qualifier指定需要装配的bean的名字
  6. @Autowired可以标记在方法上,构造器上(组件只有一个有参构造器,可以省略@Autowired注解)、参数上、这个时候参数都是从容器中获取参数组件的值。

@Resource(JSR250)、@Inject(JSR330)[Java规范注解]

  1. @Resource可以实现和@Autowired相同的注解,但是默认是按照组件名称来进行装配的。无法支持@Qualifier@Primaryrequired注解。
  2. @Inject需要导入javax.inject包,和 @Autowired注解基本相同,没有required=fasle功能

注入spring底层容器

  1. 自定义的组件如果要使用Spring容器底层的一些组件(ApplicationContextBeanFactory等等),这个时候自定义组件需要实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件,从而将Spring底层的一些组件注入到自定义的Bean中。xxxAware的功能都是通过xxxAwareProcessor实现。

@Profile

该注解指定组件在哪个环境下才能被住到容器中,如果不做指定,则所有环境都能注入。该注解可以标注到类,方法上。

  1. 加了环境标示的bean,只有在这个环境被激活时才能注册到容器中,默认环境为default
  2. 写在配置类上,只有在指定环境的时候,整个配置类才会生效
  3. 没有标注的bean,在任何环境下都会生效
  4. 修改环境的方法:
    通过命令行参数 -Dspring.profiles.active = 环境名称
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章