依赖注入方式

依赖注入的两种方式

  • setter注入:

    简单类型。

    引用类型(常用)。

  • 构造器注入:

    简单类型。

    引用类型。

setter方式注入

引用类型

content-721

简单类型

content-722

构造方式注入

引用类型

content-723

简单类型

content-724

参数适配

content-725

依赖注入方式选择

  1. 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现。

  2. 可选依赖使用setter注入进行,灵活性强。

  3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨。

  4. 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入。

  5. 实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入。

  6. 自己开发的模块推荐使用setter注入。

依赖自动装配

自动装配概念

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配。

  • 自动装配方式:

    按类型(常用)。

    按名称。

    按构造方法。

    不启用自动装配。

自动装配类型

依赖自动装配

配置中使用bean标签autowire属性设置自动装配的类型。

1
2
<bean id="bookDao" class="edu.heuet.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="edu.heuet.service.impl.BookServiceImpl" autowire="byType"/>

依赖自动装配特征

  1. 自动装配用于引用类型依赖注入,不能对简单类型进行操作。

  2. 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用。

  3. 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用。

  4. 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效。

集合注入

注入数组类型数据

1
2
3
4
5
6
7
<property name="array">
<array>
<value>100</value>
<value>200</value>
<value>300</value>
</array>
</property>

注入List类型数据

1
2
3
4
5
6
7
8
<property name="list">
<list>
<value>liming</value>
<value>lihua</value>
<value>zhangsan</value>
<value>danny</value>
</list>
</property>

注入Set类型数据

1
2
3
4
5
6
7
8
<property name="set">
<set>
<value>liming</value>
<value>lihua</value>
<value>zhangsan</value>
<value>danny</value>
</set>
</property>

注入Map类型数据

1
2
3
4
5
6
7
<property name="map">
<map>
<entry key="country" value="china"/>
<entry key="province" value="henan"/>
<entry key="city" value="kaifeng"/>
</map>
</property>

注入Properties类型数据

1
2
3
4
5
6
7
<property name="properties">
<props>
<prop key="country">china</prop>
<prop key="province">henan</prop>
<prop key="city">kaifeng</prop>
</props>
</property>

说明:property标签表示setter方式注入,构造方式注入constructor-arg标签内部也可以写<array>、<list>、<set>、<map>、<props>标签。