重新认识IOC

你真的认识IOC吗?重新认识IOC

什么是IOC

IOC是Inversion of Control的缩写,大多数书籍翻译成“控制反转”。控制反转的意思是说控制权被反转了:本来由对象自己去控制,现在交给容器控制。(以前创建对象时是自己通过new的方式主动去创建,但是由于控制器被反转交给容器后,某个对象需要另一个对象时不需要通过去new的主动创建对象,而是被动的等待容器为它创建对象) 这个也称之为好莱坞原则:好莱坞原则:不要来打电话给我(导演),我会打电话给你(演员)
这里的“我”指的是资源,你就是应用系统(模块)在1983年,Richard E. Sweet 在《The Mesa Programming Environment》中提出“Hollywood Principle”(好莱坞原则)

而DI(Dependency Injection),即依赖注入,2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是哪些方面的控制被反转了呢?“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。

依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

IoC主要实现策略

  • Using a service locator pattern 服务定位模式(JavaEE定义的一种模式,获取DataSource这些东西)
  • Using dependency injection,for example 依赖注入
    • Constructor injection 构造器注入
    • parameter injection 参数注入
    • Setter injection set注入
    • Interface injection 接口注入
  • Using a contextualized lookup 上下文依赖查询(有JavaBeans之类的来实现)
  • Using template method design pattern 模版方法模式
  • Using strategy design pattern 策略模式

其实主要是通过两大类,主要的有:
依赖查找:容器提供回调接口和上下文条件给组件。EJB和Apache Avalon 都使用这种方式。这样一来,组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在那些回调方法上:容器将调用这些回调方法,从而让应用代码获得相关资源。
依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)
来自:百度百科

IoC容器的职责

  • 依赖处理
    • 依赖查找
    • 依赖注入
  • 生命周期管理
    • 容器
    • 托管的资料
  • 配置
    • 容器
    • 外部化配置
    • 托管的资料

猜你喜欢

转载自blog.csdn.net/qq_45422703/article/details/109021777