1 理解依赖注入
A对象需要调用B对象方法的情形,被Spring称为依赖,即A对象依赖于B对象;
互相调用的关系称为依赖关系;
Spring容器是一个大工厂,管理着所有java对象,这些对象被称为Bean;
Spring容器通过一种“依赖注入”的方式来管理Bean之间的依赖关系;
使用依赖注入,可谓Bean注入普通的属性值,注入其它的Bean引用;
依赖注入是一种优秀的解耦方式,让Spring的Bean以配置文件的方式组织在一起,而不是硬编码的方式组织在一起;
IOC--控制反转和DI--依赖注入,其含义完全相同,只是描述的角度不同;
IOC--控制反转-: 调用者获取被依赖的对象,由原来的主动便成为被动接受;
DI--依赖注入:Spring直接将被依赖的对象注入给调用者,无需调用者主动去获取;
2 属性注入(设置注入)
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
属性注入是实际应用中最常用的注入方式
<Bean id="student" class="com.bugshi.Studeng"> <property name="stuName" value="bugshi"></property> <property name="age" value="13"></property>
<property name="school" ref="school"></property>
</bean>
<bean/> :代表一个Bean对象,id:唯一标识,class:对应的类,Spring通过该类使用反射得到类的信息完成信息的设置;
<property> :代表一个Bean对象的属性,name:属性的setter方法的首字母小写,value : 设置的属性值,ref:指向某个Bean的引用id;
3 构造注入
通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用;
构造器注入在 <constructor-arg> 元素里声明属性, <constructor-arg> 中没有 name 属性;
按索引匹配入参:以下标去匹配参数
<Bean id="student" class="com.bugshi.Studeng"> <constructor value="bugshi" index="0"></constructor> <constructor value="13" index="1"></constructor>
<constructor ref="school"></constructor>
</bean>
按类型匹配入参:以类型去匹配参数
<Bean id="student" class="com.bugshi.Studeng"> <constructor value="bugshi" type="java.lang.String"></constructor> <constructor value="13" index="1" type="int"></constructor>
<constructor ref="school"></constructor>
</bean>
ref属性:指向某个Bean引用的Id;
两种注入方式没有绝对的好坏,只有应用场景的不通;
建议采用属性注入为主,构造注入为辅的注入策略;