spring自动装配
spring自动装配是自动配置各个SpringBean对象依赖的方法,通过springIoC容器spring会在应用上下文中为某个bean寻找其依赖的bean。
通过两个操作完成自动装配,让程序员配置步骤减少:
- 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
- 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;
xml的bean中配置autowrie属性
byName
根据名称去查找spring容器中与之对应的id名称,被注入的属性的set后面的字段名必须与被查找的ID相同,否则注入失败。
即方法中为 setAddress();则容器中必须要有一个ID=“address”的才能注入成功。
若set方法为:setAddressssssssssss()则ID=“addressssssssssss”就能注入成功。与被注入的属性名无关。(在实际开发过程中,命名必须规范)
byType
根据属性的类型去查找spring容器中与之对应的class,且该类型的bean有且只能有一个,否则注入失败。即使用前提:同一类型的对象,在spring容器中唯一。
注解配置@Autowired
- @Autowired是按类型自动转配的,不支持id匹配。
- 需要导入 spring-aop的包。
在Spring配置中引入context文件头并开启注解:
<context:annotation-config/>
并在Spring配置上配上类的基本信息。
在java类中需要被注入的属性上配置@Autowired注解。
此时该属性不需要set方法。
@Autowired(required=false):
true:(默认值)被注入的属性必须存在,否则报错
false:被注入的属性可以为null,即可以没有
注解@Qualifier
- @Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配
- @Qualifier不能单独使用。
注解@Resource
- @Resource如有指定的name属性,先按该属性进行byName方式查找装配;
- 其次再进行默认的byName方式进行装配;
- 如果以上都不成功,则按byType的方式自动装配。
- 都不成功,则报异常。