四、自动装配
当一个bean依赖另一个bean时,在后者创建时自动将后者装配到前者中
1. bean装配
@Autowired
按照类型装配
-
常标注在bean的属性上
若存在多个相同类型的bean,则按照被注解的属性的属性名来注入
-
标注在参数上
bean将会被装配在该参数上
-
标注在属性的
setter方法上bean将会被装配在参数上,接下来spring将会调用
setter方法 -
标注在构造器上
bean将会被装配在参数上,接下来spring将会调用该构造方法
当bean有且只有一个有参构造器,没有无参构造器,可以省略
@Autowired注解,并依旧可以自动装配 -
标注在被
@Bean标注的方法的参数上bean将会被装配在参数上,参数也可以省略
@Autowired注解,并依旧可以自动装配
| 属性名 | 作用 |
|---|---|
| required | 是否必须装配(其他装配注解都不支持) |
@Primary
标注在被装配的bean上(可以是Class、@Component、@Bean)
被标注有@Primary的bean会被优先装配
@Qualifier
常标注在bean的属性上,当有多个bean作为候选装配时(如使用@Autowired时),按照该注解的value属性值作为bean的id进行装配,优先级高于@Primary
@Resource
功能类似于@Autowired,但不支持@Primary与@Qualifier
| 属性名 | 作用 |
|---|---|
| name | bean的id |
2. Aware装配
可以通过实现xxxAware接口来将Spring的一些底层组件注入到bean中
有一些比较有趣的Aware
| Aware | 作用 |
|---|---|
| EmbeddedValueResolverAware | 可以用来解析spEL |
| MessageSourceAware | 可以用来国际化文本信息 |
| ResourceLoaderAware | 获取资源加载器读取资源文件 |
| EnvironmentAware | 能获取当前容器的环境属性信息 |