3. Spring: 深入理解IoC

3. Spring: 深入理解IoC

IoC 是 Spring容器的内核,AOP、声明式事务等功能都依赖于此功能

  1. 解耦过程实例

    • 问题场景

      在这里插入图片描述

    • 解耦过程

      在这里插入图片描述

    • IoC解耦

      • 接口具体实现类的控制权从调用类移除,转交到第三方决定

        例如场景中:

        • 控制:选择刘建明角色扮演者的控制权
        • 反转:控制权从剧本中移除,转交到了导演手中

        3.3

  2. IoC注入

    扫描二维码关注公众号,回复: 3889104 查看本文章
    • 构造函数注入

      通过调用类的构造函数,将接口实现通过构造函数变量传入

      在这里插入图片描述

    • 属性注入

      (用到的时候才注入,比构造函数注入节约)

      在这里插入图片描述

    • 接口注入

      (增加类的数量,和属性注入本质区别不大,所以不提倡)

      在这里插入图片描述

    • Spring 配置示例

      在这里插入图片描述

  3. Java反射机制

    • ClassLoader

      类装载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件,主要工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。

      • 工作机制

        1. 装载:查找和导入Class文件
        2. 链接:执行校验,准备和解析步骤
        3. 初始化:对类的静态变量,静态代码块执行初始化工作
      • ClassLoader之间的关系

        public static void main(String[] args) {
                ClassLoader loader=Thread.currentThread().getContextClassLoader();
                System.out.println("current loader: "+loader);
                System.out.println("parent loader: "+loader.getParent());
                System.out.println("grandparent loader: "+loader.getParent().getParent());
        }
        
        current loader: sun.misc.Launcher$AppClassLoader@18b4aac2
        parent loader: sun.misc.Launcher$ExtClassLoader@5451c3a8
        grandparent loader: null   (根装载器,非java编写,无法显示出来)
        
        
      • 重要方法

        Class loadClass(String name)  //name类装载器需要装载的类的名字
        Class defineClass(String name,byte[]b,int off ,int len)//字节数组装换成java.lang.class 对象
        Class findSystemClass(String name)   //从本地文件系统载入class文件
        Class findLoadedClass(String name)   //查看classloader是否已经装入到某个类中
        ClassLoader getParent()//类装载器的父装载器除了根装载器 其他类装载器都有且仅有一个父装载器
        
        
    • 重要的反射类

      • Constructor: 类的构造函数的反射类,获得类的所有构造函数
      • Method:方法的反射类
        • getReturnType()
        • getParameterType()
        • getExceptionType()
        • getParameterAnnotations()
      • Field:类的成员变量的反射类
    • Java反射与IoC的关系

      在这里插入图片描述

  4. 资源访问工具类

    • JDK所提供的访问资源类并不能很好的满足各种底层资源的访问请求,因此Spring设计了一个Resource接口,它为应用提供了更加强大的访问底层资源的能力。

      在这里插入图片描述

    • 资源加载机制

      在这里插入图片描述

    • 资源加载类接口

      在这里插入图片描述

  5. BeanFactory和ApplicationContext

    • BeanFactory是一个类工厂,可以创建管理各种类的对象,Spring称这些创建和管理的Java对象为Bean(Spring 的基础设施)

      • 初始化顺序
        1. 创建配置文件
        2. 装载配置文件
        3. 启动IoC容器
        4. 获取Bean示例
    • ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。

      BeanFactory很多功能需要编程实现

      ApplicationContext则可以通过配置的方法来实现

猜你喜欢

转载自blog.csdn.net/Hi_maxin/article/details/83414897