ioc编程

一、什么是ioc?

首先要强调的是ioc是一种编程思想,而不是技术。ioc的全称叫inversion of control,即控制反转的意思。那控制反转又是什么意思呢?通俗点来说就是原来你控制的事情,现在不再由你来控制。在java传统的编程设计中,我们在对象内部通过new来创建对象,而ioc编程设计则由一个专门的容器来创建、管理这些对象。

 

二、为什么要用ioc?

第一:对象的实例化不是一件简单的事情,比如对象的关系比较复杂,依赖关系往往需要程序员去维护,这是一件非常头疼的事。 

第二:解耦,由容器去维护具体的对象 

第三:托管了类的产生过程,比如我们需要在类的产生过程中做一些处理,最直接的例子就是代理,如果有容器程序可以把这部分过程交给容器,应用程序则无需去关心类是如何完成代理的

传统应用程序由我们主动查找、在类中创建所需对象,导致类与类之间的高耦合性,不利于程序扩展和维护。有了ioc容器后,对象的创建与注入均由容器控制与维护,降低了类与类之间的耦合性,有利于功能复用,程序扩展和维护。

 

三、ioc的两种实现DI和DL

1.依赖注入DI(Depedency Injection):其有三种实现:构造函数注入,设置方法注入和接口注入

 

2.依赖查找DL(Dependency Lookup):依赖拖拽,上下文依赖查找

2.1依赖拖拽:

注入的对象如何与组件发生联系,这个过程就是通过依赖拖拽实现 。(较少有使用)

2.2上下文依赖查找:

在某些方面跟依赖拖拽类似,但是上下文依赖查找中,查找的过程是在容器管理的资源中进行的,而不是从集中注册表中,并且通常是作用在某些设置点上。(DL 已经被抛弃,因为他需要用户自己去是使用 API 进行查找资源和组装对象。即有侵入性。)

两者的区别是:上下文依赖查找是在业务组件代码中进行的,而依赖拖拽是从一个集中的注册处,特定的地点执行。

 

四、使用DI实现ioc的框架

 使用 DI 方式实现 IoC 的不止 Spring,包括 Google 的 Guice,还有一个冷门的 PicoContainer(极度轻量,但只提供 IoC)。

在最初,Spring使用XML配置文件的方式来描述bean的定义以及相互间的依赖关系,但随着Spring的发展,越来越多的人对这种方式表示不满,因为Spring项目的所有业务类均以bean的形式配置在XML文件中,造成了大量的XML文件,使项目变得复杂且难以管理。

后来,基于纯Java Annotation依赖注入框架 Guice出世,其性能明显优于采用XML方式的Spring,甚至有部分人认为, Guice可以完全取代Spring( Guice仅是一个轻量级IOC框架,取代Spring还差的挺远)。正是这样的危机感,促使Spring及社区推出并持续完善了 JavaConfig子项目,它基于Java代码和Annotation注解来描述bean之间的依赖绑定关系。因此才有了spring boot!

 

 

参考文章:

https://www.jianshu.com/p/26654a18d1fe

https://blog.csdn.net/qq_22654611/article/details/52606960/

https://blog.51cto.com/luecsc/1964056

 

更多内容请关注微信公众号“外里科技

官方公众号外里科技
运营公众号英雄赚
微信wxid_8awklmbh1fzm22
QQ1247408032
开源代码https://gitee.com/B_T/beimi

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值