DI注入解析

DI概述

DI-依赖注入。spring两大核心,IOC和DI,IOC是控制反转,是一种设计模式,简单来讲就是将我们的实体类交给spring来管理,一般现在常用的是注解@Component,然后在applicationContext.xml中配置包扫描。而DI是IOC的另一种理解方式,现在更着重体现在注入方面,用于解决主键之间的装配问题。我们现在常用的@Autowired注解就是DI的一个具体使用,是基于注解的依赖注入的核心注解。

DI的注入方式

  • 1.set注入
    通过set方法注入,要求类提供set方法
	<bean id="" class="">
	<!--name是属性名,value是属性注入值-->
    <property name="XX" value="XXX"></property>
    <!-- 如果属性⾮普通类型⽽是引⽤类型,需要将value换成ref -->
    <property name="XX" ref="X"></property>
</bean>
  • 2.构造器注入
    通过调用有参构造器创建对象,要求提供有参构造,但注意要声明无参构造
<bean id="" class="">
    <constructor-arg value="XXX" name="XX" index="X" type="X">  </constructor-arg>
    <!--name、index、type等都是指定value对应哪个属性,三者可选,若不写则会按照类当中构造⽅法参数顺序给其赋值-->
    <!--其中name是属性名,index是属性物理下标-->
</bean>
  • 3.p名称空间注入
    本质上是set注入,但简化了写法,省略了多个标签。
    引用了p命名空间,需要在xml约束中添加一个p
    xmlns:p=“http://www.springframework.org/schema/p”
<bean id="A" class="XXX.XXX.A" p:name1="XXX"></bean>
<bean id="XX" class="XXX.XXX.XX" p:name1="XXX" p:name2-ref="A"></bean>
  • 4.spEL表达式属性注入
    spEL即Spring EL
<bean id="" class="">
    <property name="XX" value="#{'String'}"></property>
    <!--字符串打单引号-->
    <property name="XX" value="#{10}"></property>
    <!--数字直接写-->
    <property name="XX" value="#{引⽤}"></property>
    <!--引⽤类型也直接写,⽽且可以不⽤ref=""-->
    <property name="XX" value="#{引⽤.字段}"></property>
    <!--也可以在EL中调⽤引⽤类型的字段来给当前bean的字段赋值-->
</bean>
  • 5.集合注入
    本质上也是set注入
    集合注入分为“数组和list集合”、“set集合”、“map集合”
  • 数组和list集合
<bean id="" class="">
        <property name="X" value="XX">
        <property name="array">
            <list>
                <value>a</value>
                <value>b</value>
                <value>c</value>
            </list>
        </property>
    </bean>
  • set集合
<bean id="" class="">
        <property name="X" value="XX">
        <property name="array">
            <set>
                <value>a</value>
                <value>b</value>
                <value>c</value>
            </set>
        </property>
    </bean>
  • map集合
<bean id="" class="">
        <property name="myMap">
            <map>
                <entry key="name1" value="value1"></entry>
                <entry key="name2" value="value2"></entry>
                <entry key="name3" value="value3"></entry>
            </map>
        </property>
    </bean>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值