zoukankan      html  css  js  c++  java
  • 002 IOC--Bean创建的分析

    一 .概述

      前面我们说到IOC提供的功能就是两点.

      (1)Bean的创建

      (2)Bean依赖的管理

    本节就讨论Bean的创建的问题.


    二 .java对象到底如何创建

      我们在未使用spring的时候,创建对象的方式只有一个,那就是使用构造函数.

       spring也没有什么其他的神奇能力,依旧还是使用的构造函数.

    我们一般将构造函数分成两类 :

      (1)无参构造函数

      (2)有参构造函数

    为何这样区分呢? 

      对象如果要使用就需要创建出来,使用构造函数式唯一的途径.但是一个对象想要运转就可能需要依赖,如果我们想要保证这种强依赖关系,最好的方式就是在构造函数之中声明.

      如果我们的构造函数需要参数,就说明这个对象需要强依赖某个对象(资源,泛化的资源).

    那么是不是说没有无参构造函数的对象就不需要强依赖呢?不是,虽然能创建出对象来,但是对象未必是可用的,这个时候对象就需要进行初始化操作.

      但是有强依赖的对象一定需要在创建的时候指明,否则根本无法获得这个对象.构造函数决定了这一点.

      这样我们创建对象的方式就从这里出现了一点不同,但是我们需要知道的是Bean的创建就是在使用构造函数.

      记住,创建并不等于初始化,这个概念在spring之中分的很明显,但是我们常常将创建和初始化都称为初始化.


    三 .反射创建对象

      没有其他的方式,spring也是使用了反射来创建对象.这里我们只先说无参的情况下,有参的情况其实就是依赖注入的内容了.

    下面一个简单的例子展示一下反射创建对象: 

    public class MainTest {
        
        public static void main(String[] args) throws Exception {
            //获取类加载器
            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            //加载Date字节码
            Class<?> clazz = classLoader.loadClass("java.util.Date");
            //创建对象,Date用于无参构造函数
            Date date  = (Date) clazz.newInstance();
            System.out.println(date);
        }
    }

    我们给出了java字节码的位置.我们就能使用反射来创建对象.spring也是使用这个方式来创建对象的,当然其中的复杂度spring帮助我们隐藏掉了.


    四 . 总结

      IOC的一个主要任务就是创建对象,我们现在知道创建对象的唯一方式就是构造函数.

      因此我们无论使用什么方式,都是将构造函数的信息交给spring,spring才能帮助我们创建出Bean来.

  • 相关阅读:
    MFC tab页面中获到其它页面的数据
    sqlite数据库中"Select * From XXX能查到数据,但是Select DISTINCT group From xxx Order By group却查不出来
    关闭程序出现崩溃(exe 已触发了一个断点及未加载ucrtbased.pdb)
    springboot 通用Mapper使用
    springBoot 发布war包
    springCloud Zuul网关
    springboot hystrix turbine 聚合监控
    springBoot Feign Hystrix Dashboard
    springBoot Ribbon Hystrix Dashboard
    springBoot Feign Hystrix
  • 原文地址:https://www.cnblogs.com/trekxu/p/9090441.html
Copyright © 2011-2022 走看看