Spring中Bean的自动装配
- 自动装配是使用spring满足bean依赖的一种方法
- spring会在应用上下文中为某个bean寻找其依赖的bean。
Spring中bean有三种装配机制,分别是:
- 在xml中显式配置;
- 在java中显式配置;
- 隐式的bean发现机制和自动装配【重点】
本文主要介绍第三种,自动化的装配bean
Spring的自动装配需要从两个角度来实现,或者说是两个操作:
- 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
- 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;
组件扫描和自动装配组合发挥巨大威力,使的显示的配置降低到最少。
推荐不使用自动装配xml配置 , 而使用注解
byName
autowire byName (按名称自动装配)
由于在手动配置xml过程中,常常发生字母缺漏和大小写等错误,而无法对其进行检查,使得开发效率降低。
采用自动装配将避免这些错误,并且使配置简单化。
测试:
- 修改bean配置,增加一个属性 autowire=“byName”
<bean id="cat" class="com.lding.pojo.Cat"></bean> <bean id="dog" class="com.lding.pojo.Dog"></bean> <!-- byName 会自动在容器上下文中查找,和自己对象set方法后面的值对应的 beanid(缺点 需保证beanid 和set后面名字一样)--> <!-- byType 会自动在容器上下文中查找,和自己对象属性类型相同的bean(缺点 需要保证全局唯一 有两个dog不行)--> <bean id="people" class="com.lding.pojo.People" autowire="byName"> <property name="name" value="冷丁"></property> </bean>
注意这里的cat必须是cat 如果改成cat123就报错,cat和People类setCat后面这个Cat对应的小写cat对应,如果写成Cat也报错
byType
autowire byType (按类型自动装配)
使用autowire byType首先需要保证:同一类型的对象,在spring容器中唯一。如果不唯一,会报不唯一的异常。
- 将user的bean配置修改一下 : autowire=“byType”