1.spring支持的属性注入的方法:构造函数注入,setter方法注入
User类,属性name,age
public class User { private String name; private Integer age; public User(String name, Integer age) { this.name = name; this.age = age; }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User() {
}
@Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
2.构造函数注入--<constructor-arg>(name,value,index,type,ref)
当属性中有了对象呢?
将<constructor-arg>或<property>中的value替换成ref即可,ref的值是对象属性在xml中的beanId
<bean id="user" class="com.pheony.demo4.User" > <constructor-arg name="name" value="张三"></constructor-arg> <constructor-arg name="age" value="35"></constructor-arg> </bean>
3.setter方法注入--<property>(name,value,ref)
<bean id="user1" class="com.pheony.demo4.User" > <property name="name" value="李四"></property> <property name="age" value="18"></property> </bean>
注:使用setter不仅要对属性添加set方法,当有有参构造方法的时候,需要添加上无参构造方法,否则没有<constructor-arg>会报错
p命名空间-------简化xml配置(spring2.5之后引入)
<bean id="user2" class="com.pheony.demo4.User" p:name="王五" p:age="23" p:cat-ref="cat" />
SpEL注入:spring表达式语言,对依赖进行简化
语法:value="#{表达式}"
4.复杂类型属性的注入
数组类型 private String[] arrs;
<property name="arrs"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property>
List集合类型 private List<String> list;
<property name="list"> <list> <value>111</value> <value>222</value> <value>333</value> </list> </property>
Set集合类型 private Set<String> set;
<property name="set"> <set> <value>ddd</value> <value>eee</value> <value>fff</value> </set> </property>
Map集合类型 private Map<String,Integer> map;
<property name="map"> <map> <entry key="a" value="1"></entry> <entry key="b" value="2"></entry> <entry key="c" value="3"></entry> </map> </property>
Properties类型 private Properties properties;
<property name="properties"> <props> <prop key="username" >root</prop> <prop key="password" >root</prop> </props> </property>