Spring 1.3 DI依赖注入
3.1 DI :依赖注入 Dependency Injection
is a 继承
has a 依赖 类A依赖于另一个B(类)对象
依赖 :在一个类中的属性使用另一个类
注入:setter方法赋值
3.2 案例解析
之前:
Class UserServiceImpl{
//以前
private UserDao userDao=new UserServiceImpl();
//依赖
private UserDao userDao;
//注入
Public setUserDao(UserDao userDao)
this.userDao= userDao;
}
3.3 案例过程
1、新建UserDao接口
public interface UserDao {
void saveUser();
}
2、新建UserDaoImpl实现类
public class UserDaoImpl implements UserDao {
@Override
public void saveUser() {
System.out.println(“spring创建了实例,注入了”);
}
}
3.新建UserService接口
public interface UerService {
void saveUser();
}
4.新建UserServiceImpl 实现类
public class UserServiceImpl implements UerService {
// 以前需要创建对象
// private UserDao userDao=new UserDaoImpl();
//现在:进行依赖注入
private UserDao userDao;
//可以使用setter快捷键导入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void saveUser() {
userDao.saveUser();
}
}
5.resources文件下新建beans.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
bean :配置要被创建对象的类/配置由spring容器管理的类
id:给bean取名,用于获取
class:类的全限定名
-->
<!--配置UseServiceImpl-->
<bean id="userServiceId2" class="com.whxh.test2.UserServiceImpl">
<!--setter注入:property配置依赖,name为依赖名称,ref注入的另一个bean的id-->
<property name="userDao" ref="userDaoId"></property>
</bean>
<!--配置UseDaoImpl-->
<bean id="userDaoId" class="com.whxh.test2.UserDaoImpl"></bean>
</beans>
6.测试类
public class DITest {
@Test
public void iocTest(){
//创建spring容器
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“test2/beans2.xml”);
//获取对象
UserServiceImpl userServiceId2 = applicationContext.getBean(“userServiceId2”, UserServiceImpl.class);
userServiceId2.saveUser();
}
}
运行测试类。
3.4 注入方式
1 新建address类
public class Address {
private String tel;
private String addrName;
}
2 新建person类
public class Person {
private String name;
private int age;
private Address homeAddr;
private Address companyAddr;
}
关系图

3 注入:beans.xml文件代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
bean :配置要被创建对象的类/配置由spring容器管理的类
id:给bean取名,用于获取
class:类的全限定名
-->
<bean id="personId" class="com.whxh.test3.Person">
<property name="name" value="赵敏"></property>
<property name="age" value="18"></property>
<!--引用类型:ref-->
<property name="homeAddr" ref="homeAddressId"></property>
<property name="companyAddr" ref="comAddressId"></property>
</bean>
<bean id="homeAddressId" class="com.whxh.test3.Address">
<property name="addrName" value="北京朝阳区"></property>
<property name="tel" value="110"></property>
</bean>
<bean id="comAddressId" class="com.whxh.test3.Address">
<property name="addrName" value="北京中关村"></property>
<property name="tel" value="027"></property>
</bean>
</beans>
4 测试类
public class SetTest {
@Test
public void iocTest(){
//创建spring容器
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“test3/beans3.xml”);
//获取对象
Person person =(Person) applicationContext.getBean(“personId”);
System.out.println("person = " + person);
}
}
运行测试类。
3.5 list注入案例
1、新建AllData 类 含数组、集合等类型
public class AllData {
private String[] arrayData;
private List listData;
private Set setData;
private Map<String,String> mapData;
private Properties propData;
}
2、注入文件:beans.xml文件代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="allDataId" class="com.whxh.test4.AllData">
<!--
集合注入(标签):数组 <array>
list <list>
map <map>
set <set>
properties <props>
-->
<property name="arrayData">
<array>
<value>CXK</value>
<value>蔡徐坤</value>
</array>
</property>
<property name="listData">
<list>
<value>JNTM</value>
<value>鸡你太美</value>
</list>
</property>
<property name="setData">
<set>
<value>DS</value>
<value>屌丝</value>
</set>
</property>
<property name="mapData">
<map>
<entry key="王宝强" value="马蓉"></entry>
<entry key="听风" value="白字"></entry>
</map>
</property>
<property name="propData">
<props>
<prop key="张三">18</prop>
<prop key="李四">28</prop>
</props>
</property>
</bean>
</beans>
3 测试类
public class AllDataTest {
@Test
public void iocTest(){
//创建spring容器
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“test4/beans4.xml”);
//获取对象
AllData allData =(AllData) applicationContext.getBean(“allDataId”);
System.out.println("allData = " + allData);
}
}
4.运行测试类。