依赖注入
Bean的依赖注入的数据类型:
- 普通数据类型
- 引用数据类型
- 集合数据类型
注入对象:
1.业务实现类UseServiceImpl
public class UseServiceImpl implements UseService {
private UseDao useDao;
public void setUseDao(UseDao useDao){
this.useDao=useDao;
}
@Override
public void save() {
useDao.save();
}
}
2.Spring xml中进行依赖注入
功能:将UseDao的实例注入给UseService实例里
<bean id="useDao" class="Dao.impl.UseDaoImpl"></bean>
<bean id="useService" class="service.serviceImpl.UseServiceImpl">
<property name="useDao" ref="useDao"></property>
</bean>
注意:property 中name的值为方法setUseDao的“UseDao”首字母小写,即为"useDao"
当属性很多时,用<property/>显得有些拥挤,可以采用set方法的另一种实现----P命名
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="useDao" class="Dao.impl.UseDaoImpl"></bean>
<bean id="useService" class="service.serviceImpl.UseServiceImpl" p:useDao-ref="useDao">
</bean>
</beans>
接下来就是构造方法实现依赖注入:
1.UseServiceImpl 类
public class UseServiceImpl implements UseService {
private UseDao useDao;
public UseServiceImpl(UseDao useDao1) {
this.useDao = useDao1;
}
public UseServiceImpl(){
}
@Override
public void save() {
useDao.save();
}
}
2.applicationContext.xml
<bean id="useDao" class="Dao.impl.UseDaoImpl"></bean>
<bean id="useService" class="service.serviceImpl.UseServiceImpl">
<constructor-arg name="useDao1" ref="useDao"></constructor-arg>
</bean>
在constructor-arg标签里,name属性为构造参数的输入参数useDao1,ref属性为引用useDao的Bean。
注入数据 :
private String useName;
private int age;
public void setUseName(String useName) {
this.useName = useName;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void save() {
System.out.println(useName+"------"+age);
System.out.println("save running.....");
}
<bean id="useDao" class="Dao.impl.UseDaoImpl">
<property name="useName" value="zhangsan"></property>
<property name="age" value="18"></property>
</bean>
注入集合:
1.Use类
public class Use {
private String name;
private String addr;
public Use(String name, String addr) {
this.name = name;
this.addr = addr;
}
public Use(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Use{" +
"name='" + name + '\'' +
", addr='" + addr + '\'' +
'}';
}
}
2.UseDaoImpl类
private List<String> list;
private Map<String,Use> map;
private Properties properties;
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, Use> getMap() {
return map;
}
public void setMap(Map<String, Use> map) {
this.map = map;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public void save() {
System.out.println(map);
System.out.println("save running.....");
}
3.applicationContext.xml
<bean id="use1" class="domain.Use">
<property name="addr" value="beiing"></property>
<property name="name" value="lucy"></property>
</bean>
<bean id="use2" class="domain.Use">
<property name="addr" value="tianjin"></property>
<property name="name" value="tom"></property>
</bean>
<bean id="useDao" class="Dao.impl.UseDaoImpl">
<property name="list">
<list>
<value>hello</value>
<value>world</value>
</list>
</property>
<property name="map">
<map>
<entry key="u1" value-ref="use1"></entry>
<entry key="u2" value-ref="use2"></entry>
</map>
</property>
</bean>
运行结果:
{u1=Use{name='lucy', addr='beiing'}, u2=Use{name='tom', addr='tianjin'}}
save running.....