属性的注入一般的分为两种
- 注意:
我这里使用的spring的版本是4.2.2.在contructor-arg标签中使用name属性的时候会出现错误提示。这里应该是版本不支持name属性,换用index属性就可以解决。 - 使用有参构造来注入
user.java代码
package cn.zll.spring.demo1;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class user {
private String username;
private int age;
private List<String> list;
private Map<String, String> map;
private Map<String, List<String>> maplist;
public user(String username, int age,List<String> list,Map<String, String> map,Map<String, List<String>> maplist) {
super();
this.username = username;
this.age = age;
this.list=list;
this.map=map;
this.maplist=maplist;
}
public void add(){
System.out.println(username+"-"+age+"-"+list+"-"+map+"-"+maplist);
}
}
bean.xml文件中的配置
//实例化bean
<bean id="user" class="cn.zll.spring.demo1.user">
//注入普通的字符串
<constructor-arg index="0" value="xxx"></constructor-arg>
//注入int类型
<constructor-arg index="1" value="10"></constructor-arg>
//注入list,同注入数组一样
<constructor-arg index="2" >
<list>
<value>广州</value>
<value>番禺</value>
</list>
</constructor-arg>
//注入map
<constructor-arg index="3" >
<map>
<entry key="国家" value="中国" ></entry>
<entry key="省市" value="河南"></entry>
</map>
</constructor-arg>
//注入复杂map类型
<constructor-arg index="4">
<map>
<entry key="zhou">
<list>
<value>xx</value>
<value>xxx</value>
</list>
</entry>
<entry key="zhao">
<list>
<value>xx</value>
<value>xxx</value>
</list>
</entry>
</map>
</constructor-arg>
</bean>
通过set方法来注入属性
work.java代码
package cn.zll.spring.demo1;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class worker {
private String name;
private int age;
private boolean bool;
private List<String> list;
private Map<String , String>map;
private Map<String, List<String>> maplist;
private Properties prop;
public void setProp(Properties prop) {
this.prop = prop;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setBool(boolean bool) {
this.bool = bool;
}
public void setList(List<String> list) {
this.list = list;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void setMaplist(Map<String, List<String>> maplist) {
this.maplist = maplist;
}
@Override
public String toString() {
return "worker [age=" + age + ", bool=" + bool + ", list=" + list
+ ", map=" + map + ", maplist=" + maplist + ", name=" + name
+ ", prop=" + prop + "]";
}
}
-bean.xml中的代码
<bean id="work" class="cn.zll.spring.demo1.worker" >
<property name="name" value="xx"></property>
<property name="age" value="10"></property>
<property name="bool" value="true"></property>
<property name="list">
<list>
<value>中国</value>
<value>日本</value>
</list>
</property>
<property name="map" >
<map>
<entry key="1" value="上午"></entry>
<entry key="2" value="下午"></entry>
</map>
</property>
<property name="maplist">
<map>
<entry key="3">
<list>
<value>你好</value>
<value>世界</value>
</list>
</entry>
<entry key="4">
<list>
<value>hello</value>
<value>world</value>
</list>
</entry>
</map>
</property>
//把properties作为属性
<property name="prop">
<props>
<prop key="classForname">com.mysql.jdbc.Driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>
- 把对象注入属性
应用场景就是在service.java中调用dao.java中的方法。
具体的做法就是在service中定义一个属性为dao.然后通过注入属性的方式把dao赋值一个对象。这样我们就在service中获取dao的对象,从而调用dao中的方法。
service.java中的代码:
package cn.zll.service;
import cn.zll.dao.dao;
public class service {
//按照一般的思路来说,我们要拿到dao的对象在调用dao中的方法
//通过ioc我们可以在service中得到dao,也就是通过set方法给dao对象赋值。
private dao d;
public void setD(dao d) {
this.d = d;
}
public void serviceAdd(){
d.add();
}
}
bean.xml中的代码:
<bean id="dao" class="cn.zll.dao.dao"></bean>
<bean id="service" class="cn.zll.service.service">
<!-- 注入对象类型的属性
name就时service的属性,ref就是dao对象在上边已经创建出来,因此service中有了dao的对象。
-->
<property name="d" ref="dao"></property>
</bean>