IOC控制反转(依赖注入思想)
获取map 类型的 request session application 的方法:@H_301_5@ 实现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; } 以上实际上是运用了IOC(inverse 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容器负责管理。