IOC/DI是什么(二)

在Spring中,所有的bean都在Spring容器中登记,Spring容器在程序运行到适当的时候,把当前对象需要的资源主动给当前对象,同时也把当前对象作为一种资源交给其他需要当前对象的对象,所有对象的创建、销毁都由Spring容器来控制。以前对象的生命周期,是由引用它的对象决定的,实际上也就是程序决定的,现在所有对象都由Spring容器来控制,控制权由程序代码交给了容器,这叫控制反转。

IOC的一个重点,是在系统运行期间,容器动态的向对象提供其所需的资源,也就是真正需要的时候,才给相应的资源,程序里不主动创建所需要的对象,也就不存在依赖,这样令项目中层与层之间、组件之间的耦合度变小了。旧的方式是在程序里主动new一个对象,这样就会形成依赖,导致系统的耦合度较高。

举个例子,Dao层中有一个类A,包含了数据库CRUD操作的相应方法,A类首先需要一个Connection对象,才能完成CRUD操作,因此A依赖于Connection,旧的方式是在A中new一个Connection对象,这样A与Connection就产生了耦合,为什么这么说呢?因为我们需要在Dao层中去写一个获取Connection的实现类,这个类中包含了Connection需要的相关信息,比如数据库密码、用户名等,如果更换数据库,那么必定要改变相应的实现类,因此耦合度高。如果换成使用Spring容器来管理这些资源,在程序中,或者说在Dao层,则不需要写一个专门的类来获取Connection资源,在合适的时机,Spring容器会将Connection对象自动注入到A中,那么究竟是如何实现DI(依赖注入)的呢?Java中有个概念叫反射,通过反射允许程序在运行中,动态的生成对象,执行对象方法,获取对象的属性。Spring就是通过反射来实现依赖注入的。

总结:控制反转是什么?获取依赖对象的方式被反转了,依赖注入实际是另一种说法,或者说是另一个角度看待同一个问题。

转载于:https://my.oschina.net/u/3733854/blog/1603632

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值