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>