倘若我们想在一个类中,调用另一个类的对象的话,在Spring框架中是有封装好的框架提供给我们使用的,这里我们首先对bean.xml进行入门,从而展开性使用。
在DI(依赖注入)中,能注入的数据是有三种类型的:
1、基本类型和String
2、其他bean类型(在配置文件中或者注解配置过的bean对象)
3、复杂类型/集合类型
依赖注入的方法也是有三种的:
1、使用构造函数进行提供
2、使用set方法进行提供
3、使用注解的方式进行提供
一、使用构造函数的方式进行注入依赖
关键标签:<constructor-arg></constructor-arg>
标签出现位置:<bean>标签内部
标签中出现的属性:
type:用于指定要注入的数据类型,该数据类型也是构造函数中的某些类型或者某些参数
index:指定要注入的数据给构造函数中指定索引位置的参数赋值,参数索引的位置是从0开始
name:用于指定构造函数中指定名称的参数赋值(最常用)
---------------------------------------------------------------------------------------------
value:用于提供基本类型和String类型
ref:用于指定其他bean类型的数据,指定的是Spring-IoC核心容器下的唯一id
优势:在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功
弊端: 改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供
使用方式:
<bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl">
<!--这个就会把test给String类型的点-->
<constructor-arg name="name" value="test"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
<!--配置一個id对象-->
<bean id="now" class="java.util.Date"></bean>
二、使用set方法进行注入(相比于构造函数更为常用)
关键标签:<property></property>
出现位置:bean标签内部
标签中的属性:
name:用于指定注入时所调用的set方法名,注意是【方法名!方法名!方法名】
value:用于提供基本类型和String类型的数据
ref:用于指定其他Bean类型的数据,指的就是在SpringIoC核心容器中的唯一id
set方法的优势: 创建对象时没有明确的限制,可以直接使用默认构造函数
set方法的弊端: 如果有某个成员必须有值的时候,则获取对象时有可能set方法无法保证一定注入。
使用方式:
<bean id="accountService2" class="com.ysw.web.service.impl.AccountServiceImpl2">
<!--只有name、value、ref-->
<property name="age" value="18"></property>
<property name="name" value="test"></property>
<property name="birthday" ref="now"></property>
</bean>
三、通过set注入的方式实现复杂类型的注入和集合类型的注入
用于给list结构集合注入的标签
list array set
用于给map结构集合注入的标签
map props
结构相同,标签可以互换,实例代码:
<bean id="accountService3" class="com.ysw.web.service.impl.AccountServiceImpl3">
<property name="myStrs">
<array>
<value>String1</value>
<value>String2</value>
<value>String3</value>
</array>
</property>
<property name="myList">
<list>
<value>list1</value>
<value>list2</value>
<value>list3</value>
</list>
</property>
<property name="mySet">
<set>
<value>set1</value>
<value>set2</value>
<value>set3</value>
</set>
</property>
<property name="myMap">
<map>
<entry key="map1" value="map111"></entry>
<entry key="map2">
<value>map222</value>
</entry>
</map>
</property>
<property name="myProps">
<props>
<prop key="prop1">prop111</prop>
<prop key="prop2">prop222</prop>
</props>
</property>
</bean>