zoukankan      html  css  js  c++  java
  • Spring(一)——IOC和DI的简单理解

    Spring是一个IOC(DI)和AOP容器框架,并且是开源的。

    1.IOC和DI

    比较官方的说法:

    IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式。

    DI(Dependency Injection) IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接。

    我的理解:

    • IOC:控制反转,反转资源获取的方向。 只是一种设计思想,意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

    public class HelloWorld {
        private String name;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void hello(){
            System.out.println("hello: " + this.name);
        }
    }
    
    // 传统
    // 1.创建一个HelloWorld对象
    HelloWorld helloWorld = new HelloWorld();
    // 2.对象进行赋值
    helloWorld.setName("张三");
    // 3.调用方法
    helloWorld.hello();
    
    // Spring
    // 1.创建Spring的IOC容器对象
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 2.从IOC实例中获取Bean实例
    HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld", HelloWorld.class);
    // 3.调用方法
    helloWorld.hello();
    • DI:依赖注入,依赖用容器把资源注入

    2.IOC 容器 BeanFactory & ApplicationContext 概述

    • ApplicationContext代表IOC容器,是一个接口,也可以使用BeanFactory来创建IOC容器,不过常用ApplicationContext。

    • ApplicationContext的主要实现类:

      • ClassPathXmlApplicationContext从类路径(src)下加载配置文件,也可以自己指定,但需要全类名

      • FileSystemXmlApplicationContext:从文件系统中加载配置文件

      • ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动、刷新和关闭上下文的能力(这个先了解,后面再学)

      • ApplicationContext在初始化上下文时就实例化所有单例的Bean

    • ApplicationContext的方法

      • getBean():从IOC容器中获取Bean,该方法是父接口(BeanFactory)的方法

        • 是一个重载方法,可由如下创建

        • 不推荐使用该方法,要是有多个相同类型的Bean,就不知道要获取哪一个实例

  • 相关阅读:
    Linux学习笔记:常用100条命令(三)
    Linux学习笔记:常用100条命令(二)
    k8s的imagePullSecrets如何生成及使用
    Jenkins基于https的k8s配置
    ubuntu supervisor管理uwsgi+nginx
    ubuntu Django + Uwsgi + Nginx 的生产环境部署
    ubuntu 安装和配置 GitLab
    ubuntu 安装harbor仓库
    ubuntu 安装Jenkins
    php过滤html标签截取部分内容
  • 原文地址:https://www.cnblogs.com/flunggg/p/12184676.html
Copyright © 2011-2022 走看看