002 IOC--Bean创建的分析

一 .概述

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

  (1)Bean的创建

  (2)Bean依赖的管理

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


二 .java对象到底如何创建

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

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

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

  (1)无参构造函数

扫描二维码关注公众号,回复: 1028840 查看本文章

  (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来.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9090441.html
002