spring bean的初始化方式和注入方式(xml配置文件)
初始化方式:
- 无参构造方法
- 静态工厂
- 动态工厂
注入方式:
- 构造方法注入
- set方法注入
注解使用
@Autowired
使用方式1:标注在属性上
- 直接给属性赋值(通过 @Autowired 依赖注入,不需要配置 set 方法)
- 默认是通过 by Type(根据类型,即接口类型)的形式从 IOC 容器中查找对象并给属性注入值
- 如果 IOC 容器中存在多个与属性同类型的对象(一个接口有多个实现类)
- 则会按照属性名(by Name)作为唯一标志从容器中查找对象并给属性注入值
- 也可以和 @Qualifier 注解共同使用,指定唯一标志从容器中查找对象并给属性注入值
- value:指定 IOC 容器中对象唯一标志(id)
注意:@Qualifier 只能结合 @Autowired 一起使用
使用方式2:标注在方法上
- 表示自动执行当前方法,如果方法有参数,会自动从IOC容器中寻找同类型的对象给参数传值
- 也可以在参数上添加 @Qualifier(“IOC容器中对象id”) 注解按照名称寻找对象给参数传值
@Autowired 使用注意事项
- 只能在被 Spring 容器托管(标注了 @Controller 等 IOC 注解)的类中使用 @Autowired 注解
- 自动注入与权限修饰符无关,即使是 private 修饰的字段也可以自动注入
- 默认情况下,使用 @Autowired 注解进行自动注入的属性一定要被装配( Spring 容器托管)如果在容器中找不到该类型的bean 进行注入,就会报错。
- 如果允许不被装配,可以将 @Autowired 的 required 属性为 false
- @Autowired 是基于类型的注入,如果当前类型属性在容器中只有一个 Bean,那么属性名不限制,但一般建议遵循类名首字母小写的规则
- 如果当前属性类型在容器中有个多个Bean,那么必须要通过属性名或者同时标注 @Qualifier 注解指定 Bean name