SSM第一天 springDI
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>