zoukankan      html  css  js  c++  java
  • 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容器负责管理。

    Face your past without regret. Handle your present with confidence.Prepare for future without fear. keep the faith and drop the fear. 面对过去无怨无悔,把握现在充满信心,备战未来无所畏惧。保持信念,克服恐惧!一点一滴的积累,一点一滴的沉淀,学技术需要不断的积淀!
  • 相关阅读:
    Java基础教程:面向对象编程[3]
    Java拓展教程:文件DES加解密
    JavaScript:学习笔记(4)——This关键字
    jQuery:[2]百度地图开发平台实战
    Android开发——减小APK大小
    玩转ButterKnife注入框架
    Java技术——多态的实现原理
    RxAndroid结合Retrofit,看看谁才是最佳拍档!
    Android开发——AsyncTask的使用以及源码解析
    10本比较鸡肋的技术类书籍,简要回顾
  • 原文地址:https://www.cnblogs.com/200911/p/2477150.html
Copyright © 2011-2022 走看看