DI(Dependecy Inject,依赖注入)是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。
目录
一、DI实现方式
1.set注入=通过set方法维护对象之间的依赖关系
2.构造注入=通过构造方法维护对象之间的依赖关系
3.属性注入(不推荐)
二、set注入数据的类型
xml实现set注入I实现步骤:
1.思考需要什么类的什么属性;
2.给属性提供set方法;
3.在bean标签内部开始配置:
配置位置:<bean>此位置</bean>
配置语法:<property id="属性值" class="属性值"></property>
配置属性:
name====>属性名称
value====>属性值
ref======>属性值的引用
1.注入对象
<!-- set注入对象三层模型(手动装配)-->
<bean id="controllerImp" class="com.apesource.controller.ControllerImp">
<property name="service" ref="serviceImp"></property>
</bean>
<bean class="com.apesource.service.ServiceImp" id="serviceImp">
<property name="dao" ref="daoImp"></property>
</bean>
<bean class="com.apesource.dao.DaoImp" id="daoImp"></bean>
<!--开启自动装配默认按照名称-->
default-autowire="byName"
<!-- 自动装配(set)-->
<!-- autowire设置为byType,按照类型装配,与名称无关-->
<bean id="1212" class="com.apesource.Dao.DaoImp"></bean>
<bean id="service" class="com.apesource.service.ServiceImp" autowire="byType"></bean>
<bean id="controller" class="com.apesource.controller.ControllerImp"></bean>
2.注入基本类型和String(引用类型)
<!--set注入基本类型和String-->
<bean id="student" class="com.apesource.pojo.Student">
<property name="stuName" value="张三丰"></property>
<property name="stuSex" value="男"></property>
<property name="stuAge" value="99"></property>
</bean>
3.注入复杂类型list、arry、set、map、properties
<!--set注入复杂类型-->
<bean id="teacher" class="com.apesource.pojo.Teacher">
<property name="myList">
<list>
<value>赵钱孙李</value>
<value>周吴郑王</value>
<value>冯陈褚卫</value>
</list>
</property>
<property name="mySet">
<set>
<value>蒋沈韩杨</value>
<value>朱秦尤许</value>
<value>何吕施张</value>
</set>
</property>
<property name="myMap">
<map>
<entry key="水木年华" value="一生有你"></entry>
<entry key="李健" value="君子行"></entry>
<entry key="李宗盛" value="山丘"></entry>
</map>
</property>
<property name="myArray">
<array>
<value>贝加尔湖畔</value>
<value>门</value>
<value>玛琳娜</value>
</array>
</property>
<property name="properties">
<props>
<prop key="刘惜君">我很快乐</prop>
<prop key="林俊杰">愿与愁</prop>
<prop key="李健">传奇</prop>
</props>
</property>
</bean>
</beans>
三、构造注入数据的类型
xml实现构造注入DI实现步骤:
1.思考需要哪一个实体类的有参构造方法
2.给属性提供构造方法
3.在bean标签内部开启配置
配置位置:<bean>此位置</bean>
配置语法:<constructor-arg 属性名="属性值"></constructor-arg>
配置属性:
name=====>构造方法参数名称
index=====>构造方法参数下标
type======>构造方法参数类型
value=====>属性值
ref=======>属性值的引用
1.构造注入对象
<!-- 手动装配-->
<!--构造注入对象-->
<bean id="daoImp" class="com.apesource.Dao.DaoImp"></bean>
<bean id="serviceImp" class="com.apesource.service.ServiceImp">
<constructor-arg name="dao" ref="daoImp"></constructor-arg>
</bean>
<bean id="controllerImp" class="com.apesource.controller.ControllerImp">
<constructor-arg name="service" ref="serviceImp"></constructor-arg>
</bean>
2.构造注入基本类型和引用类型(以String为例)
<!--构造注入基本类型与String方式1-->
<bean id="student1" class="com.apesource.pojo.Student">
<constructor-arg name="stuName" value="张三"></constructor-arg>
<constructor-arg name="stuAge" value="23"></constructor-arg>
</bean>
<!--构造注入基本类型与String方式2-->
<bean id="student2" class="com.apesource.pojo.Student">
<constructor-arg index="0" value="李四"></constructor-arg>
<constructor-arg index="1" value="21"></constructor-arg>
</bean>
<!--构造注入基本类型与String方式3-->
<bean id="student3" class="com.apesource.pojo.Student">
<constructor-arg type="java.lang.String" value="王五"></constructor-arg>
<constructor-arg type="int" value="23"></constructor-arg>
</bean>
3.构造注入不支持注入复杂类型