浅谈IOC编程思想

浅谈IOC编程思想

为什么写IOC

在编程中经常用到IOC这种思想,比如Spring中使用注解@Autowire或者@Resource等注解就可以直接生成一个对象。虽然十分的方便但是这种思想是如何产生的?

IOC起源

我网上查找的资料就是Michael Mattson 在 1996年发布的《Object Oriented Frameworks: a survey on methodological issues》论文中最先提出的,并且他第96页的结论中写到。
An object-oriented framework is “a (generative) architecture designed for maximum reuse, represented as a collective set of abstract and concrete classes; encapsulated potential behaviour for subclassed specializations.”

假设没有IOC

系统内的依赖如同一个图的结构

a
b
c

此时类c依赖于a接口的实例和b接口的实例 ,但是c的功能可能并不关心ab具体的实现,它需要的仅仅需要是a或者b类型实例即可。这时候就需要手动去 new出来 ab的具体实现类来给到c那么这样的设计就是很不合理的。

  1. 耦合性高,可维护性差
  2. 违反依赖倒置原则

什么是IOC

IOC 是Inversion of Control的缩写表示 控制反转
在整个系统中IOC就相当于哆啦A梦的口袋,任何对象可以通过这个口袋中拿到。有了IOC容器之后再看c对象的依赖,它虽然还是依赖于ab但是情况却不一样了

IOC容器
a
b
c

如图所示,此时的情况相当于c c的依赖交由IOC容器进行管理,在程序运行时IOC容器主动的将ab进行注入到c中。这时候 c由主动创建a和b两个依赖的行为被反转为被动接受IOC容器注入a和b依赖

思考一下?

既然是控制反转那么哪些控制被反转了,由上面介绍可见c的依赖控制由主动变为了被动。是获取以来的过程被反转了 恭喜你得到了和2004年,Martin Fowler一样的结论。

IOC容器有什么有点和有什么缺点

优点 它的优点当然是它出生时解决的痛点

  1. 依赖解耦,可维护性提高
  2. 资源集中管理,让资源的可配置和更易管理。

缺点

  1. 复杂性提高效率变慢(原本注入一个依赖就可以,现在却多了整个IOC容器,所以不适用微小型项目)

IOC职责

如下图所示

IOC职责
依赖处理
生命周期管理
配置
依赖注入
依赖查找
容器生命周期
托管的资源生命周期
容器配置
托管的资源配置
外部化配置

IOC的实现

IOC有很多的实现
比如

  • JavaEE实现
    1. JavaBeans
    2. Java ServiceLoader SPI
    3. JNDI (Java Naming and Directory Interface)
  • JavaSE实现
    1. EJB
    2. Servlet
  • 其他开源实现
    1. Apache Avalon
    2. PicoContainer
    3. Spring Framewrok

可见IOC并不是Spring独有,Spring的IOC实现也是参考了一些其他框架的,关于SpringIOC的详细信息可以参考一下网址 【Spring官方文档】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天心有情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值