Spring的核心机制:依赖注入(DI)

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;

两种注入方式没有绝对的好坏,只有应用场景的不通;

建议采用属性注入为主,构造注入为辅的注入策略;

猜你喜欢

转载自www.cnblogs.com/shici/p/10171661.html