spring 的IOC原理

来源:互联网 发布:知乎app收藏 编辑:程序博客网 时间:2024/05/12 22:59

 Spring的设计理念:

 

Spring的核心组件:bean 、context、core,这三个中最核心的是bean,bean就像舞台的演员一样,context就像背景一样,core就像道具一样。Sping 解决的关键问题就是如何管理这些bean,spring把对象包裹在bean中达到对对象的管理和一些额外操作,把对象之间的依赖关系转而用配置文件来管理,就是它的依赖注入机制,这个依赖注入关系在一个叫做IOC的容器中进行管理。Spring构建一个数据结构,根据这个数据结构设计它的生存环境context,并让它在这个生存环境中不停的发现、建立、维护bean之间的关系,context就是一个bean关系的集合,这个关系的集合就叫做IOC容器。Core就是发现、建立、维护每个bean之间关系所需要的一系列工具。这就是spring的设计理念。

 

Bean组件:

(1)     bean组件主要解决三件事:定义、创建、解析bean,bean是工厂模式beanfactory创建的,bean主要由beanDefinition定义描述的,bean的解析主要是对spring配置文件解析。

beanfactory是顶级接口,他的三个子类ListableBeanFactory、HierarchicalBeanFactory、AutoAireCapableBeanFactory。他们最终的默认实现类是DefaultListableBeanFactory,它实现的所有的接口。每个接口都有它使用的场合,主要是区分spring内部对象的传递和转化过程中对对象的数据访问所作的限制。ListableBeanFactory 接口表示这些 Bean 是可列

HierarchicalBeanFactory 表示Bean 是有继承关系的,AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。

(3)bean的定义就是完整的描述spring配置文件中节点的所有信息。Spring成功解析配置文件定义的节点后, spring内部就将它转化为beandefinition对象,以后所有的操作都是对这个对象完成的。

 

Context组件

  Context就是给spring提供一个运行时环境,以保存各个对象的状态,context环境的构建。

(1)     context继承了5个接口,用于扩展context的功能。继承beanFactory,容器的运行主体对象是bean,beanfactory用于创建bean。ApplicationContext继承了resourceLoader, ,使得 ApplicationContext 可以访问到任何外部资源。

(2)ApplicationContext 的子类主要包含两个方面:configurableApplicationContext说明context是可修改的,用户可以动态的添加修改已有的配置信息,他下面的多个子类:

其中最经常使用的是可更新的 Context,即 AbstractRefreshableApplicationContext 类。

 WebApplicationContext 顾名思义,就是为 web 准备的 Context 他可以直接访问到 ServletContext,通常情况下,这个接口使用的少。

(3)application要做的事情:标识一个应用环境,利用beanfactory创建bean对象,保存对象的关系表,能够捕获各种事件。

 

 

Core 是spring的演出时的道具,看看这个道具:

(1)     resource接口封装了各种可能的资源类型,对使用者来说屏蔽了文件类型的不同。Resource继承了inputStreamSource接口,这个接口提供了getInputStreamSource方法,返回inputStream类,所有的资源都可以通过inputStream类获得,屏蔽了资源提供者。资源的加载也是通过ResourceLoader接口完成的,屏蔽了资源的加载者,他的默认实现类defaultResourceLoader.

(2)     Context资源的加载、解析、描述工作委托给了ResourcePatternResolver类来完成,他把资源的加载、解析和定义整合在一起便于其他组件使用。

 

 

 

IOC容器的构建:

  IOC容器就是context组件结合其他两个组件构成bean的关系网,构建的入口就是abstractApplicationContext的refresh入口。步骤:注册可能感兴趣的事件;创建bean的实例对象;触发被监听的事件

(1)    创建和配置beanFactory,通过AbstractRefreshableApplicationContext. refreshBeanFactory 方法创建更新beanfactory,beanFactory已存在就更新,如果没有就创建.loadBeanDefinitions(beanFactory)把用户自定义的数据结构转化为IOC容器特定的数据结构。

(2)    创建好 BeanFactory 后,接下去添加一些 Spring 本身需要的一些工具类,这个操作在 AbstractApplicationContext 的 prepareBeanFactory 方法完成。

 

 

原创粉丝点击