SpringDI(Dependency Injection)
DI作用:因为IOC解除了程序间的依赖关系,所以DI就是weil维护程序间的依赖关系,称:依赖注入
能注入的三类数据类型:
- 基本类型和String
- 其他bean类型(在配置文件中或者注解配置过的bean)
- 复杂类型/集合类型
注入的三种方式:
使用构造函数注入
优势: 可以实现,在获取某对象时,注入数据时必须的操作,否则对象无法创建成功
弊端: 改变了bean对象的实例化方式,导致我们在创建对象时,如果用不到这些属性,也必须提供
<bean id="userService" class="com.xp.service.impl.UserServiceImpl"> <constructor-arg name="name" value="哈哈哈"></constructor-arg> <constructor-arg name="age" value="18"></constructor-arg> <constructor-arg name="date" ref="now"></constructor-arg> </bean> <bean id="now" class="java.util.Date"></bean>
- 参数说明:
-
一个constructor-arg标签代表一个依赖
-
constructor-arg属性:
- type 用于指定要注入的数据类型,该数据类型也是构造函数中某个或某些参数的类型
- index 用于指定要注入的数据,给构造函数中指定索引位置的参数辅助,索引从0开始
- name 用于指定给构造函数中指定名称的函数辅助(常用)
- 以上三个都是用于指定给构造函数中哪个参数赋值
- value 用于提供基本类型和String类型的数据
-
- ref 用于指定其他bean类型数据,即在spring的IOC核心容器中配置的bean对象
-
使用set方法注入(常用)
优势: 创建对象时没有明确限制,可以直接使用默认构造函数
弊端: 无法实现让某个属性必须有值,则获取对象是有可能set方法没有执行
<bean id="userService" class="com.xp.service.impl.UserServiceImpl"> <property name="name" value="hhh"></property> <property name="age" value="17"></property> <property name="date" ref="now"></property> </bean> <bean id="now" class="java.util.Date"></bean>
- 参数说明:
- 一个property标签代表一个依赖
- property属性:
- name 用于指定给构造函数中指定名称的函数辅助(常用)
- value 用于提供基本类型和String类型的数据x
- ref 用于指定其他bean类型数据,即在spring的IOC核心容器中配置的bean对象
- 参数说明:
-
使用注解注入
复杂类型注入
-
常用:List,Array,Set,Map,Propertise
-
list,set,array标签可以混用,map和props标签可以混用,即结构相同,标签可以互换,所以,只需要记住两个标签即可
<bean id="userDao" class="com.xp.dao.impl.UserDaoImpl"> <property name="myList"> <list> <value>213</value> <value>2513</value> <value>43</value> <value>2613</value> </list> </property> <property name="myStrs"> <array> <value>324</value> <value>324534</value> <value>25654</value> </array> </property> <property name="mySet"> <set> <value>23</value> <value>234</value> <value>235</value> <value>236</value> </set> </property> <property name="myMap"> <map> <entry key="3424" value="543534"> </entry> <entry key="3453"> <value>3453</value> </entry> </map> </property> <property name="myProps"> <props> <prop key="32243">fsdf</prop> <prop key="45">fsd</prop> <prop key="32543243">fsd</prop> </props> </property> </bean>
来源:https://www.cnblogs.com/Climb-Xu/p/12650397.html