SSH之Spring——IOC如何实现依赖注入
2014-09-09 15:01
633 查看
一、什么是IOC
IOC(Inversion of Control)控制反转,轻量级的Spring框架的核心,管理对象。就是一个对象如何获取所依赖对象的引用,责任的反转。本来由应用程序管理对象之间的依赖关系,现在交给了容器管理,这叫控制反转。即交给了IOC容器,Spring的IOC容器主要使用注入方式实现,不需要主动查找,对象的查找、定位和创建都由容器管理。
二、准备工作
根据类图建立类,关系如下:
![](http://img.blog.csdn.net/20140909113001726)
三、一般的实现方式
UserManager依赖UserDao,它要主动实例化类,用应用程序负责定位类,这是咱们平时的操作:
四、IOC容器实现方法
让spring管理我们对象的创建和依赖,必须将依赖关系配置到spring的核心配置文件(applicationContext.xml)中
1.用构造函数法
也就是通过构造函数将UserDao实现注入过来
先看配置文件
看UserManager的实现类如何通过构造函数实现注入
构造函数中将Dao作为参数传递实现注入
客户端的代码如下
2.setter方法
以设值的方式实现注入
配置文件如何配置
看UserManager的实现类如何通过构造函数实现注入
五、总结
1.方法没有好与坏,适合的就是最好的。构造函数法适用于类初始化就要传递参数,但是如果参数很多不建议用,建议使用setter方法。
2.IOC容器很好的解耦,将一般实现中耦合部分放到xml文件中,不用应用程序维护依赖关系,即将接口实现注入到需要的类中,依赖关系的形成利用反射机制。
3.大量减少了Factory和单例的数量,使代码更加清晰,主要原因是我们不再查找、定位、创建和管理对象之间的依赖关系,都交给IOC容器管理
对Spring的学习刚开始,如果有理解错误的地方请多多指教。
IOC(Inversion of Control)控制反转,轻量级的Spring框架的核心,管理对象。就是一个对象如何获取所依赖对象的引用,责任的反转。本来由应用程序管理对象之间的依赖关系,现在交给了容器管理,这叫控制反转。即交给了IOC容器,Spring的IOC容器主要使用注入方式实现,不需要主动查找,对象的查找、定位和创建都由容器管理。
二、准备工作
根据类图建立类,关系如下:
三、一般的实现方式
UserManager依赖UserDao,它要主动实例化类,用应用程序负责定位类,这是咱们平时的操作:
public class UserManagerImpl implements UserManager { public void addUser(String username, String password) { //由我们的应用程序负责服务(对象)定位 UserDao userDao = new UserDao4MySqlImpl(); userDao.addUser(username, password); } }客户端同样也要实例化UserManager的实现类
public class Client { public static void main(String[] args) { //由我们的应用程序负责服务(对象)定位 UserManager userManager = new UserManagerImpl(); userManager.addUser("zhangdan", "123"); } }
四、IOC容器实现方法
让spring管理我们对象的创建和依赖,必须将依赖关系配置到spring的核心配置文件(applicationContext.xml)中
1.用构造函数法
也就是通过构造函数将UserDao实现注入过来
先看配置文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="userDao4MySql" class="com.zx.spring.dao.UserDao4MySqlImpl"/> <bean id="userDao4Oracle" class="com.zx.spring.dao.UserDao4OracleImpl" /> <bean id="userManager" class="com.zx.spring.manager.UserManagerImpl" > <!-- 构造方法 --> <constructor-arg ref="userDao4Oracle"/> </bean> </beans>配置文件中将DAO的实现类配置过来,其中id是唯一标识,在配置UserManager时,配置Dao引用即ref,它的值是实现类的id
看UserManager的实现类如何通过构造函数实现注入
public class UserManagerImpl implements UserManager { private UserDao userDao; public UserManagerImpl(UserDao userDao) { this.userDao = userDao; } public void addUser(String username, String password) { userDao.addUser(username, password); } }
构造函数中将Dao作为参数传递实现注入
客户端的代码如下
public class Client { public static void main(String[] args) { //请求IOC容器 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("zhangdan", "123"); } }
2.setter方法
以设值的方式实现注入
配置文件如何配置
<bean id="userManager" class="com.zx.spring.manager.UserManagerImpl" > <!-- setter方法 --> <property name="userDao" ref="userDao4MySql"/> </bean>name的值是setUserDao的方法名字,去掉set并且首字母小写,只是与引用的名字形同而已,这个地方要注意。
看UserManager的实现类如何通过构造函数实现注入
public class UserManagerImpl implements UserManager { private UserDao userDao; public void addUser(String username, String password) { userDao.addUser(username, password); } //setter方法 public void setUserDao(UserDao userDao) { this.userDao = userDao; } }客户端的实现相同,这里不重复写。
五、总结
1.方法没有好与坏,适合的就是最好的。构造函数法适用于类初始化就要传递参数,但是如果参数很多不建议用,建议使用setter方法。
2.IOC容器很好的解耦,将一般实现中耦合部分放到xml文件中,不用应用程序维护依赖关系,即将接口实现注入到需要的类中,依赖关系的形成利用反射机制。
3.大量减少了Factory和单例的数量,使代码更加清晰,主要原因是我们不再查找、定位、创建和管理对象之间的依赖关系,都交给IOC容器管理
对Spring的学习刚开始,如果有理解错误的地方请多多指教。
相关文章推荐
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- Spring如何实现自动依赖注入-------autowire
- TinyFrame续篇:整合Spring IOC实现依赖注入
- IoC 依赖注入、以及在Spring中的实现
- IoC/依赖注入、以及在Spring中的实现 (转载)
- 【SSH系列】深入浅出spring IOC中三种依赖注入方式
- IoC 依赖注入、以及在Spring中的实现
- IoC 依赖注入、以及在Spring中的实现
- 【Spring源码--IOC容器的实现】(六)Bean的依赖注入
- 如何在quartz的job中实现spring的依赖注入
- 【SSH系列】深入浅出spring IOC中三种依赖注入方式
- Spring如何实现自动依赖注入-------autowire
- Spring IoC依赖注入的实现
- Spring依赖注入的XML配置文件的实现思想(1)——准备工作:如何读取XML的文件的内容