作为一个容器,通过配置文件或者注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入的工作
Spring的核心组成部分
反射
通过程序化的方式间接对Class对象实例操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息,如构造函数、属性、方法等。
主要成员
Constructor
通过newInstance获取对象类的实例
Method
提供方法的调用
Field
获取成员变量
类装载器
寻找类的字节码文件并构造出类在JVM内部表示的对象组件,主要工作由ClassLoader及其子类负责。
传值方式
- 构造函数传参
- set方法传参
从传值方式衍生出来的反射方式如下所示
反射方式1
- 通过类加载器获取目标对象
- 获取类的默认构造器对象并实例化目标对象
- 通过反射方法设置属性
反射方式2
- 通过类加载器获取目标对象
- 获取类的带有参数的构造器对象
- 使参数的构造器对象实例化目标对象
对象工厂的初始化
- 创建读取配置文件的SAXReader
- 获取当前线程中的类装载器的对象
- 利用类装载器从classpath的xml路径下获取指定的xml文件
- 通过xml文件获取对应bean的id(唯一标识)、class(类全路径)、name(属性)、value(属性值)
- 通过反射方法将value设置到类的属性当中
- 将对象放入beanMap当中,key为id
通过对象工厂获取bean
- 初始化对象工厂
- 调用init方法
- 从beanMap中根据ID获取bean
SpringIOC
将实现类、参数信息配置在对应的配置文件中,Spring的工厂类会帮我们完成配置文件的读取、利用反射机制注入对象。