Spring 自动装配
spring 配置文件中 节点的 autowire 参数可以控制 bean 自动装配的方式
- default - 默认的方式和 “no” 方式一样
- no - 不自动装配,需要使用 节点或参数
- byName - 根据名称进行装配
- byType - 根据类型进行装配
- constructor - 根据构造函数进行装配
自动装配的概念
1)手动装配:以value或ref的方式明确指定属性值都是手动装配。
2)自动装配:根据指定的装配规则,不需要明确指定,Spring自动 将匹配的属性值注入bean中。
装配模式
1)根据类型自动装配:将类型匹配的bean作为属性注入到另一个bean中。若IOC容器中有多个与目标bean类型一致的bean,Spring将无法判定哪个bean最合适该属性,所以不能执行自动装配
2)根据名称自动装配:必须将目标bean的名称和属性名设置的完全相同
3)通过构造器自动装配:当bean中存在多个构造器时,此种自动装配方式将会很复杂。不推荐使用。
选用建议
相对于使用注解的方式实现的自动装配,在XML文档中进行的自动装配略显笨拙,在项目中更多的使用注解的方式实现。
byName
它的意思是:把与 bean 的属性具有相同名字的其他 bean 自动装配到 bean 的对应属性中
<bean id="myRole" class="com.viewscenes.netsupervisor.entity.Role">
<property name="id" value="1001"></property>
<property name="name" value="管理员"></property>
</bean>
<bean id="user" class="com.viewscenes.netsupervisor.entity.User" autowire="byName"></bean>
byType
如果不使用属性名称来对应,你也可以选择使用类型来自动装配。它的意思是:把与 bean 的属性具有相同类型的其他 bean 自动装配到 bean 的对应属性中
<bean class="com.viewscenes.netsupervisor.entity.Role">
<property name="id" value="1001"></property>
<property name="name" value="管理员"></property>
</bean>
<bean id="user" class="com.viewscenes.netsupervisor.entity.User" autowire="byType"></bean>