IOC: 反转控制 Inverse Of Control
DI:依赖注入 Dependency Injection
目的:完成程序的解耦合
解释:在应用系统的开发过程中,有spring负责对象的创建,对象依赖关系的组装,对象属性的初始化,程序员只需要在程序接收spring创建的对象即可。
Object obj= new Object();
IOC : Object obj; 等着接收spring容器创建好的对象,在程序中将对象的创建的权限交出,反转到spring容器中。
DI: 某个对象需要依赖的其他对象,由spring容器完成所需要依赖对象的赋值
1 使用IOC完成三层结构的解耦合
1.1 搭建三层结构
建立Dao层接口:
1 package org.guangsoft.dao;2 /***3 * 定义dao接口4 * ***/5 public interface UsersDao6 {7 public void saveUsers();8 }
Dao层接口的实现类
1 package org.guangsoft.dao.impl; 2 import org.guangsoft.dao.UsersDao; 3 //dao实现类 4 public class UsersDaoImpl implements UsersDao 5 { 6 @Override 7 public void saveUsers() 8 { 9 System.out.println("---------将对象保存到数据库--------");10 }11 }
建立service接口
1 package org.guangsoft.service;2 /***3 * 用户业务接口4 * **/5 public interface UsersService6 {7 public void addUsers();8 }
业务层接口的实现类
1 package org.guangsoft.service.impl; 2 import org.guangsoft.dao.UsersDao; 3 import org.guangsoft.service.UsersService; 4 /*** 5 * 用户业务接口实现类 6 * ***/ 7 public class UsersServiceImpl implements UsersService 8 { 9 // 以前:创建Dao对象10 private UsersDao usersDao;11 @Override12 public void addUsers()13 {14 System.out.println("-----------调用Dao层的方法--------------");15 usersDao.saveUsers();16 }17 }
建立Action
1 package org.guangsoft.service.impl; 2 import org.guangsoft.dao.UsersDao; 3 import org.guangsoft.service.UsersService; 4 /*** 5 * 用户业务接口实现类 6 * ***/ 7 public class UsersServiceImpl implements UsersService 8 { 9 // 以前:创建Dao对象10 private UsersDao usersDao;11 @Override12 public void addUsers()13 {14 System.out.println("-----------调用Dao层的方法--------------");15 usersDao.saveUsers();16 }17 }
1.2使用spring管理三层的依赖
1 2 37 8 9 10 1112 13 15 1614 17 1918
1.3三层结构的测试
1 package org.guangsoft.test; 2 import org.junit.Test; 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 import org.guangsoft.action.UsersAction; 6 public class TestSpring 7 { 8 @Test 9 public void testHelloSpring()10 {11 // 加载spring的配置文件,获得spring的bean容器12 ApplicationContext ac13 = new ClassPathXmlApplicationContext("applicationContext.xml");14 // 从bean容器中获得需要的对象15 UsersAction usersAction = (UsersAction) ac.getBean("usersAction");16 // 调用action的方法17 usersAction.userReg();18 }19 }
理解spring的IOC 或者 DI:完成对象依赖的解耦合
2 不同类型属性的注入
2.1简单类型属性
1 23 5 8 96 7 10 12 1513 14
2.2javabean类型
Set或者构造注入:注入的时候使用ref注入
2.3集合类型属性
1 23 4 5 6 10 11 1213 18 1914 17set第一个元素 1516 20 35 36 3738 4339 42v1 40v2 41
3 注入方式的总结
Set注入:调用属性对应的set方法
简单类型的属性使用property标签的value属性赋值
javabean对象使用property标签的ref属性赋值
调用set方法赋值
1 必须生成属性对应的set方法
2 set注入
构造注入:调用构造方法给属性赋值
使用构造方法给属性赋值
1 根据constructor-arg标签的个数,找对应的构造方法
2 默认constructor-arg的顺序和构造方法的参数顺序是一致的
3 简单类型使用value,如果参数对象使用ref