4.Spring-不同类型依赖的注入

本文最后更新于2023.11.30-15:16,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥

1.标量(字面量的注入)

所有的基本型,日期,字符串,基本型的包装类

<!--第一种方式-->
<property name="" value="18">
<!--第二种方式-->   
<property name="age">
    <value>18</value>
</property>

直接使用value属性,完成赋值。

2.配置合作者bean

合作者bean:简单的来说 就是一个bean的属性 不是字面量,而是一种复合类型.

<property name="属性名" ref="bean的id">

ref属性表示 注入的bean ref(表示关联的意思)如以下实列所示:

ref属性表示 注入的bean ref(表示关联的意思)

<property name="car">
    <ref bean="car"/>
</property>

3.使用自动装配注入合作者bean

概念:指Spring容器 自动的装配bean与bean之间的依赖关系,即不需要显示的使用ref属性。

  • 在beans中加入 default-autowire属性指定

  • 在bean中加入 autowire指定

  • autowiredefault-autowire可以接受如下值:

    • no: 不使用自动装配。Bean依赖必须通过ref元素定义。这是默认配置,在较大的部署环境中不鼓励改变这个配置,显式配置合作者能够得到更清晰的依赖关系。

    • byName: 根据setter方法名进行自动装配。Spring容器查找容器中全部Bean,找出其id与setter方法名去掉set前缀,并小写首字母后同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。

    • byType: 根据setter方法的形参类型来自动装配。Spring容器查找容器中的全部Bean,如果正好有一个Bean类型与setter方法的形参类型匹配,就自动注入这个Bean;如果找到多个这样的Bean,就抛出一个异常;如果没有找到这样的Bean,则什么都不会发生,setter方法不会被调用。

    • constructor: 与byType类似,区别是用于自动匹配构造器的参数。如果容器不能恰好找到一个与构造器参数类型匹配的Bean,则会抛出一个异常。

    • autodetect: Spring容器根据Bean内部结构,自行决定使用constructor或byType策略。如果找到一个默认的构造函数,那么就会应用byType策略。

PS:使用byType时,必须确认容器中所需要类型的bean只有一个。

4.注入嵌套bean

嵌套bean由于无法被Spring容器找到,所以嵌套bean只需要class属性,不需要写id或name.

<property name="car">
    <bean class="com.demo.bean.Car">
        .....
    </bean>
</property>

5.集合类型的属性注入

对于List和数组类型的属性,在注入的时候使用list标签

<property name="nickNames">
    <list>
    </list>
</property>

如果list中泛型是字面量 则在list中使用value  list中泛型是复合型 则在list内部使用 ref或者嵌套bean

对于Set类型的属性,同上。

<property name="nickNames">
    <set>
    </set>
</property>

对于Map类型的属性,在property内部使用map标签

 <property name="">
    <map>
        <entry key="" value="" />
    </map>
</property> 

 map中使用entry 表示一个键值对,如果是标量使用key和value 如果是复合型,使用key-ref和value-ref

阅读剩余
THE END