控制反转和依赖注入

标签: 控制反转 依赖注入 | 发表时间:2013-11-17 05:33 | 作者:lidaasky
出处:http://blog.csdn.net

    上篇博客简单介绍了Spring的一些优点,现在来说一下Spring这些优点实现的基础:控制反转和依赖注入。

控制反转

    IoC(Inversion of Control),我们可以把它理解为面向对象编程的一个名词概念。直白的说,就是:本来是你该控制的事,现在交由其他人控制,即权利或责任的反转。在编程中,常见的实例是,A对象需要依赖B对象(在A中new一个B),本该是A控制这个过程,现在交由系统处理,这种做法的优势是A与B的耦合性降低;如果这种依赖关系可以控制,也提高了程序的灵活性。

依赖注入

    DI(Dependency Injection),控制反转是一个概念,如何什么手段实现?依赖注入是一个靠谱的方案,依赖注入的主要实现靠的是反射和面向接口编程,常见的如:

UserDao userDao=new userDao4Mysql();

    依赖注入,就是把这个实例化的过程分为两步:

  • 第一步:UserDao userDao;
  • 第二步:userDao=new userDao4Mysql();
    然后将第二步分离出来,写入到XML文件中,再使用反射原理将new出来的userDao4Mysql对象注入。这一步可以有两种做法:构造函数和setter。

    XML

    将使用到的userDao注入到UserManagerImpl中。

<?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: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="userDaoMysql" class="com.tgb.spring.dao.UserDao4MysqlImpl"/>
	
	<bean id="userDaoOracle" class="com.tgb.spring.dao.UserDao4OracleImpl"/>
	
	<bean id="userManager" class="com.tgb.spring.manager.UserManagerImpl">
		<property name="userDao" ref="userDao4Mysql"/>
	</bean>
</beans>

    构造函数方式

public class UserManagerImpl implements UserManager {

	private UserDao userDao;
	
	public UserManagerImpl(UserDao userDao){
		this.userDao=userDao;
	}

}

    Set方式

public class UserManagerImpl implements UserManager {

	private UserDao userDao;
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

}

总结

    如上所见,耦合性降低同时灵活性提升:

  • 耦合性降低体现在UserManagerImpl不必再直接关联UserDao4MysqlImpl。
  • 灵活体现在userDao4Mysql在配置文件中,可按需要修改,如替换为UserDao4OracleImpl。

    以上说的是优点,那么缺点呢?

  • 手写XML易产生拼写错误。
  • 反射本身生成对象会有一些效率问题(一倍多于直接new)。

   以上就是Spring的核心控制反转和依赖注入,下篇博客会说到Spring与Struts1的集成。

作者:lidaasky 发表于2013-11-16 21:33:29 原文链接
阅读:122 评论:1 查看评论

相关 [控制反转 依赖注入] 推荐:

控制反转和依赖注入

- - CSDN博客架构设计推荐文章
    上篇博客简单介绍了Spring的一些优点,现在来说一下Spring这些优点实现的基础:控制反转和依赖注入.     IoC(Inversion of Control),我们可以把它理解为面向对象编程的一个名词概念. 直白的说,就是:本来是你该控制的事,现在交由其他人控制,即权利或责任的反转.

Dagger: 一种Android平台的依赖注入框架

- - InfoQ cn
Square是一家专注于移动支付的公司,最近它 推出了一种叫做 Dagger的新库,并将其描述为“一种针对Android和Java的快速依赖注入器”,该库的源码已经发布在 GitHub上. 依赖注入(也叫做 控制反转)已在一些流行的框架中(如. Google Guice)占有重要的位置.

Java EE6 Weld(1): 上下文、依赖注入和限定词

- - BlogJava-首页技术区
    Java EE 6.0 的核心:JSR-299规范,提供了如下功能:. 注入对象的上下文生存周期管理. 绑定拦截器通过用户自定义的注解(Annotation). 为整合第三方框架提供了完整的 SPI 支持. 与 JSF,Servlet / JSP 进行了整合. 对 JSF 提供长会话(Conversation)上下文支持.

【SSH三大框架】Spring基础第二篇:Spring依赖注入的三种方式

- - CSDN博客架构设计推荐文章
控制反转(Inversion of Control)和依赖注入(Dependency Injection):. 应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它. 所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转. 对于依赖注入,有三种方式:.