控制反转和依赖注入
- - CSDN博客架构设计推荐文章 上篇博客简单介绍了Spring的一些优点,现在来说一下Spring这些优点实现的基础:控制反转和依赖注入. IoC(Inversion of Control),我们可以把它理解为面向对象编程的一个名词概念. 直白的说,就是:本来是你该控制的事,现在交由其他人控制,即权利或责任的反转.
上篇博客简单介绍了Spring的一些优点,现在来说一下Spring这些优点实现的基础:控制反转和依赖注入。
IoC(Inversion of Control),我们可以把它理解为面向对象编程的一个名词概念。直白的说,就是:本来是你该控制的事,现在交由其他人控制,即权利或责任的反转。在编程中,常见的实例是,A对象需要依赖B对象(在A中new一个B),本该是A控制这个过程,现在交由系统处理,这种做法的优势是A与B的耦合性降低;如果这种依赖关系可以控制,也提高了程序的灵活性。
DI(Dependency Injection),控制反转是一个概念,如何什么手段实现?依赖注入是一个靠谱的方案,依赖注入的主要实现靠的是反射和面向接口编程,常见的如:
UserDao userDao=new userDao4Mysql();依赖注入,就是把这个实例化的过程分为两步:
将使用到的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; } }
public class UserManagerImpl implements UserManager { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
如上所见,耦合性降低同时灵活性提升:
以上说的是优点,那么缺点呢?
以上就是Spring的核心控制反转和依赖注入,下篇博客会说到Spring与Struts1的集成。