如果是经常变化的数据,并不适用于注入的方式
能注入的数据有三类
- 基本类型和String
- 其他bean类型(在配置文件或者注解配置过的bean)
- 复杂类型/集合类型
注入方式
- 使用构造函数提供
- 使用set方法提供
- 使用注解提供
构造函数注入
就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让 spring 框架来为我们注入。
优势:在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功
缺点:改变了bean对象的实例化方式,使我们创建对象时,如果用不到这些数据,也必须提供。
要求:类中需要提供一个对应参数列表的构造函数。
标签:constructor-arg,它的属性有:
index:指定参数在构造函数参数列表的索引位置,索引位置从0开始
type:指定参数在构造函数中的数据类型,该数据类型也是构造函数中某个或某些参数的类型
name:指定参数在构造函数中的名称
value:它能赋的值是基本数据类型和 String 类型
ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class user { private String name; private Integer age; private Date birthday; public user(String name, Integer age, Date birthday) { this.name = name; this.age = age; this.birthday = birthday; } }
<!--配置user,构造函数注入--> <bean id="user" class="cn.hxx.domain.user"> <constructor-arg name="name" value="韩晓璇"/> <constructor-arg name="age" value="18"/> <constructor-arg name="birthday" ref="date"/> </bean> <!--配置一个日期对象--> <bean id="date" class="java.util.Date"></bean>
|
set方法注入
在类中提供需要注入成员的 set 方法,通过配置文件给 bean 中的属性传值:使用 set 方法的方式
涉及的标签:property
name:找的是类中 set 方法后面的部分
ref:给属性赋值是其他 bean 类型的
value:给属性赋值是基本数据类型和 string 类型的
优势:创建对象没有明显的限制,可以直接使用默认构造函数
缺点:如果某个成员必须有值,则获取对象时可能set方法没有执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class user1 { private String name; private Integer age; private Date birthday; public void setName(String name) { this.name = name; }
public void setAge(Integer age) { this.age = age; }
public void setBirthday(Date birthday) { this.birthday = birthday; } } <!--set方法注入--> <bean id="user1" class="cn.hxx.domain.user1"> <property name="age" value="18"></property> <property name="name" value="韩晓璇"></property> <property name="birthday" ref="date"></property> </bean>
|
复杂方式注入
注入集合数据:list结构的:array、list、set;Map结构的:map、entry、props、prop
在注入集合数据时,只要结构相同,标签可以互换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class user2 { private String[] myStrs; private List<String> myList; private Set mySet; private Map<String,String> myMap; private Properties myProps; } <bean id="user3" class="cn.hxx.domain.user2"> <property name="myStrs"> <array> <value>AAA</value> </array> </property>
<property name="myList"> <list> <value>AAA</value> </list> </property> <property name="myMap"> <map> <entry key="testa" value="aaa"></entry> <entry key="testb"> <value>bbb</value> </entry> </map> </property> <property name="myProps"> <props> <prop key="ccc">ccc</prop> </props> </property> </bean>
|