IOC(inverse of Control)控制反转(依赖注入)思想

获取map 类型的 request session application 的方法:

 

实现RequestAware,SessionAware,ApplicationAware接口

 

private Map<String,Object> request;

 

private Map<String,Object> session;

 

private Map<String,Object> application;

 

public void setRequest(Map<String, Object> request) {

 

this.request = request;

 

}

 

 

public void setSession(Map<String, Object> session) {

 

this.session = session;

 

}

 

 

public void setApplication(Map<String, Object> application) {

 

this.application = application;

 

}

以上实际上是运用了IOCinverse of  Control)控制反转的实想,也叫做依赖注。

所谓依赖注入,是指程序在运行的过程中,如果需要另一个对象的协作(调用它的方法,访问它的属性)时,无需在代码中创建被调用者,而是依赖于外部容器的注入。Spring 的依赖注入对调用者和被调用者几乎没有任何要求,完全支持POJO之间依赖关系的管理。

依赖注入有两种:

1.设值注入:IOC容器使用setter方法来注入被依赖的实例。

2.构造注入:IOC容器使用构造器来注入被依赖的实例。

理解:

1在传统的程序设计过程中,通常由调用者创建被调用者的实例,而在依赖注入的模式下,创建被调用者的工作不在由调用者来完成,因此称为控制反转,创建外部实例的工作由Spring容器来完成,然后注入调用者,因此称为依赖注入。

2.通过依赖注入,java EE 应用中的各种组件不需要以硬编码的方式耦合在一起,甚至无需工厂模式。

3.举例理解依赖注入:

一个人(java实例,调用者)需要一把斧子(java实例,被调用者)。

(a)在原始社会当中,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:java程序里的调用者自己创建被调用者,通常采用new关键字调用构造器创建一个被调用者,这是java初学者经常干的事情。

(b)进入工业社会,工厂出现了,斧子不在由普通人完成,而是由工厂生产,此时需要斧子的人(调用者)找到工厂,购买斧子,无需关心斧子的制造过程。对应简单的工厂模式,调用者只需要定位到工厂,无需管理被调用者的实现。

(c)进入共产主义社会,需要斧子的人甚至无需定位工厂,“坐等”社会提供即可。调用者无需关心被调用者的实现,无需理会工厂,等待Spring依赖注入

 

(a)的缺点及坏处:Java实例的调用者创建被调用者的java实例,调用者直接使用new关键字创建被调用者的实例,程序高度耦合,效率低下。坏处:

1)可扩展性差。

2)各种组件职责不清。

b)调用者无需关心被调用者的具体实现过程,只需找到符合标准的(接口)的实例即可使用。此时是面向接口的编程,可以让调用者和被调用者解耦,这是工厂模式大量使用的原因。缺点:仍需调用者主动定位工厂,调用者与工厂耦合在一起。

c)这种是最理想的情况:程序无需理会被调用者的实现,无需定位工厂,这是最好的解耦方式。实例之间的依赖关系由IOC容器负责管理。

你可能感兴趣的:(inverse)