zoukankan      html  css  js  c++  java
  • Spring框架系列(四)--IOC控制反转和DI依赖注入

    背景:

      如果对象的引用或者依赖关系的管理由具体对象完成,代码的耦合性就会很高,代码测试也变得困难。而IOC可以很好的解决这个问题,把

    依赖关系交给框架或者IOC容器进行管理,简化了开发。

      IOC是一种设计模式,而Spring IOC是其一种实现。Spring IOC提供一个基本的JavaBean容器,通过IOC模式管理依赖关系。

    IOC(Inversion of Control)两种实现:

      1、DL(Dependency Lookup),已经被淘汰,需要用户自己去查找资源和组装对象,有了侵入性

      2、DI(Dependency Injection),负责组件的装配

    Spring的IOC支持的功能:

      1、依赖注入

      2、依赖检查

      3、自动装配

      4、支持集合

      5、指定初始化方法和销毁方法

      6、支持回调某些方法(需要实现Spring接口,略有侵入性)

    最重要是依赖注入,从XML读取ref标签,ref就是runtimeBeanReference

    IOC容器主要分为两种具体表现形式:

      1、BeanFactory接口:简单容器。只是实现了最基本的功能,可以理解为hashmap,key是BeanName,value是bean instance

      2、ApplicationContext接口:高级容器。在简单容器的基础上,集成很多接口,代表整个容器的所有功能。定义了refresh(),刷新整个容

    器,重新加载/刷新所有的bean

    除了这两种,还有其他的辅助接口

    ApplicationContext作为高级容器依赖低级容器的getBean(),ClassPathXmlApplicationContext的构建过程是IOC的初始化

    流程:

    1、用户构造ClassPathXmlApplicationContext(简称 CPAC)

      CPAC首先访问了“抽象高级容器”的refresh(),这个方法是模板方法。所以要回调子类(低级容器)的refreshBeanFactory(),作用是使用

    低级容器加载所有BeanDefinition和Properties到容器中。

      低级容器加载成功后,高级容器开始处理一些回调,例如Bean后置处理器。回调setBeanFactory法。或者注册监听器等,发布事件,实例化例

    Bean等等功能。

    简单说就是:

      1、低级容器加载配置文件(从 XML,数据库,Applet),并解析成 BeanDefinition 到低级容器中。

      2、加载成功后,高级容器启动高级功能,例如接口回调,监听器,自动实例化单例,发布事件等等功能。

    加载所有的Bean配置成BeanDefinition到容器中,如果Bean有依赖关系,则使用占位符暂时代替。

    然后,在调用getBean的时候,进行真正的依赖注入,即如果碰到了属性是ref的(占位符),那么就从容器里获取这个Bean,然后注入到实例中

    —— 这就是依赖注入

    依赖注入方式:

    setter、constructor、factory、@Autowired等实现

    请自行百度或者参考我之前的文章:https://www.cnblogs.com/huigelaile/p/10973913.html

    想要深入了解可以查看《Spring技术内幕》一书第二章,或者IOC相关源码

    内容参考:http://thinkinjava.cn

  • 相关阅读:
    glib文档
    2020第42周面向失败设计
    2020第41周中年危机焦虑
    2020第40周选合适的工具
    2020第39周微行动思维
    2020第38周
    2020第37周
    2020第36周
    2020第35周不要让孩子输在起跑线
    2020第34周滥竽充数
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10977931.html
Copyright © 2011-2022 走看看