IOC概述

IOC是Spring容器的内核,AOP、声明式事务等功能都依赖于此功能,它涉及代码解耦、设计模式、代码优化等问题的考量,我们将通过以下三个方面来深入理解IOC:

IoC的初步理解

IoC的注入类型

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

 属性注入:通过setter方法完成调用类所需依赖的注入,更加灵活方便。

 接口注入:将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。

IoC的注入方式

Spring最为一个容器,通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。

java反射机制

java语言允许通过程序化的方式间接对Class的对象实例操作,class文件有类加载器加载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知class的结构信息,如构造函数、属性和方法等。

ClassLoader:

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

ClassLoader工作机制:

装载:查找和导入class文件

链接:执行校验,准备和解析步骤

初始化:对类的静态变量、静态代码块执行初始化工作

Java反射机制

Class反射对象描述类语义结构,可以从Class对象中获取构造函数,成员变量,方法等类元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射类对象在java.reflect包中定义,下面是最主要的三个反射类:

Constructor

Method

Field

Java反射机制与IOC的关系:

在Spring中,通过IoC可以将实现类、参数信息等配置在其对应的配置文件中,当需要更改实现类或参数信息时,只需要修改配置文件即可,还可以对某对象所需要的其他对象进行注入,这种注入方式都是在配置文件中做的。

Spring的IoC的实现原理利用的就是Java的反射机制,Spring的工厂类会帮助我们完成配置文件的读取、利用反射机制注入对象等工作,我们还可以通过Bean的名称获取对象的对象。

资源访问工具类

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

主要方法:

boolean exists()

boolean isOpen()

URL getURL()

File getFile()

InputStream getInputStream()

主要实现类:

ByteArrayResoure

ClassPathResource

FileSystemResource

InputStreamResource

ServletContextResource

UrlResource

为了访问不同的资源,必须使用相应的Resource实现类,这是比较麻烦的,Spring提供了一个强大的加载资源的机制,能够自动识别不同的资源类型

资源类型地址前缀:

classpath  classpath:

File    file:

http    http://

ftp     ftp://

无前缀

Ant风格的匹配符:

? 匹配文件名中的一个字符

* 匹配文件名中的任意字符

** 匹配多层路径

Ant风格的资源路径示例:

Classpath:com/t*st.xml

File:/home/hcn/*.xml

Classpath:com/**/test.xml

classpath:org/springframork/**/*.xml

BeanFactory和ApplicationContext

BeanFactory是Spring框架的最核心的接口,它提供了高级IoC的配置机制。

ApplicationContext建立在BeanFactory基础之上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用,一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。

BeanFactory是一个类工程,可以创建并管理各种类的对象,Spring称这些创建和管理的java对象为Bean。在Spring中,Java对象的范围更加宽泛。

BeanFactory体系结构:

xmlBeanFactroy

ListableBeanFactory

HierarhicalBeanFactroy

ConfigurableBeanFactory

AutowireCapableBeanFactory

SingletonBeanFactory

BeanDefinitionRegistry

初始化顺序

创建配置文件

装载配置文件

启动IoC容器

获取Bean实例

ApplicaitonContext介绍:

ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置文件的方式实现。

ApplicationContext实现类:

ClassPathXmlApplicationContext

FileSystemXmlApplicationcontext

ConfigurableApplicationContext

Bean的生命周期


Spring容器中的Bean拥有明确的生命周期,由多个特定的生命阶段组成,每个生命阶段都允许外接对Bean施加控制。