Spring之IOC(控制反转)\DI依赖注入

Spring里有一个很重要的概念.叫作IOC

那么什么是IOC呢?

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection),简称DI。

应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

Class A{
	AInterface a;
	A(){}
	aMethod(){
		a = new AInterfaceImp();
	}
    }

ClassA与AInterfaceImp就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现,即:

InterfaceImplFactory{
	AInterface create(Object condition){
		if(condition = condA){
			return new AInterfaceImpA();
		}elseif(condition = condB){
			return new AInterfaceImpB();
		}else{
			return new AInterfaceImp();
		}
	}
    }

以上的代码我们可以看到, 当我们在A类中需要AInterface的一个实例的时候,我们需要根据不同的条件来创建不同的实现实例,那么Spring就是将这些判断条件放在了XML文件里. 通过一个IOC容器,在我们需要的时候,就把接口的实现注入到需要他的类里,以达到我们的要求.


看一看Spring的配置文件:

<bean id="userDao"
  	class="com.ssh.dao.impl.UserDaoImpl">
  	<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
<bean id="userDao1"
  	class="com.ssh.dao.impl.UserDao1Impl">
  	<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
<bean id="userService"
  	class="com.ssh.service.impl.UserServiceImpl">
  	<property name="userDao" ref="userDao"></property>
</bean>

Spring是一个大工厂,帮我们生产出我们需要的各种bean.所有的有定义在xml文件中的bean都会帮我们创建.例如spring在创建userService的时候,就会查找到属性userDao, 这个时候, ioc就出现了. ioc容器就会按照这个名称去找到相应的userDao bean,然后利用反射创建一个userDao的实例, 当我们这个时候需要另外的一个userDao1, 那么我们就只用更改xml的配置文件. 只用把userService中的属性引用改为userDao1, 这样在我们在userService中取到的就是UserDao1Impl的实例, 这样我们就可以调用该实例里的方法了.这样就提高灵活性和可维护性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值