- 自动装配是Spring满足bean依赖的一种方式
- Spring会在上下文中自动寻找,并自动给bean装配属性
在Spring中有三种装配的方式
- 在xml中显示的配置
- 在Java中显示的配置
- 隐式的自动装配bean(重要)
环境
1. byName或byType自动装配
<bean id="cat" class="com.lrm.pojo.Cat"/>
<bean id="dog" class="com.lrm.pojo.Dog"/>
<bean id="person" class="com.lrm.pojo.Person" autowire="byName">
<property name="name" value="Java"/>
</bean>
小结:
- byName的时候需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致
- byType的时候需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致
2. 使用注解自动装配
jdk1.5支持注解,Spring2.5支持注解
使用注解须知:
-
导入约束(context约束) xmlns:context="http://www.springframework.org/schema/context"
-
配置注解的支持:<context:annotation-config/> <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<bean id="cat" class="com.lrm.pojo.Cat"/>
<bean id="dog" class="com.lrm.pojo.Dog"/>
<bean id="person" class="com.lrm.pojo.Person"/>
</beans>
-
直接在属性上使用@Autowired即可,使用Autowired可以不用编写set方法,前提是自动装配的属性在IOC(Spring)容器中存在,且符合名字byName
科普:
- @Nullable 字段标记了这个注解,说明这个字段可以为null
- @Autowired(required=false) 说明这个对象可以为null,否则不能为空【常用】
- @Qualifier(value=“xxx”) 如果@Autowired不能唯一自动装配上属性,则需要指定一个唯一的bean对象进行装配
- @Resource 可以根据name或者type自动匹配【常用】
@Resource和@Autowired的异同点:
- 都是用来自动装配的,都可以放在属性字段上
- @Autowried通过byType的方式实现,而且必须要求这个对象存在。
- @Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下就会报错。
- 执行顺序不同:@Autowried通过byType的方式实现。@Resource默认通过byName的方式实现
|