1. BeanFactory类结构体系:
BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂,因此要理解Spring IoC,需要先理清BeanFactory的继承机构。
2. ApplicationContext的结构体系:
ApplicationContext接口是一个BeanFactory基础上封装了更多功能的,Spring中最为常用的IoC容器,其包含两个子接口:ConfigurableApplicationContext、WebApplicationContext。
其结构体系如下:
详细的结构体系如下:
a.AbstractApplicationContext结构体系如下:
b.ConfigurablePortletApplicationContext体系结构如下:
c.ConfigurableWebApplicationContext结构体系如下:
2).WebApplicationContext体系结构如下:
3.Spring IoC容器的UML类图:
4.BeanFactory:
BeanFactory接口定义了Spring IoC容器的基本功能规范,是Spring IoC容器所应遵守的最底层和最基本的编程规范。
BeanFactory接口中所定义的IoC容器的主要方法如下:
(1).Object getBean(Stringname) throws BeansException;
getBean是IoC容器中最重要的方法,通过该方法可以取得IoC容器中管理的Bean,Bean的取得是通过指定名字来进行所引的。
(2). <T> T getBean(String name, Class<T> requiredType) throws BeansException;
根据指定的名字和类型取得IoC容器中管理的Bean,和getBean(String name)方法类似,只是多提供了一个类型安全验证机制。
(3). <T> T getBean(Class<T> requiredType) throws BeansException;
根据指定的类型取得IoC容器中管理的Bean,该方法根据指定的类型调用ListableBeanFactory(BeanFactory下的)中的取得Bean方法,但是也可能根据给定的类型调用通过名字取得Bean的方法。
(4). Object getBean(String name, Object... args) throws BeansException;
该方法重载了getBean(String name)方法,可变参数主要用来指定是否显示使用静态工厂方法创建一个原型(prototype)Bean。
(5). boolean containsBean(String name);
该方法让用户判断IoC容器中是否含有指定名字的Bean。
(6). boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
该方法用来查询指定名字的Bean是否是单态类型(singleton)的Bean。
(7). boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
该方法用来查询指定名字的Bean是否是原型(prototype)类型的Bean。
(8). boolean isTypeMatch(String name, Class targetType)throws NoSuchBeanDefinitionException;
该方法用来查询指定名字的Bean的class类型是否支持特定的class类型。
(9). Class<?> getType(String name) throws NoSuchBeanDefinitionException;
该方法用来查询指定名字的Bean的class类型。
(10). String[] getAliases(String name);
该方法用来查询指定名字的Bean的所有别名。
5.XmlBeanFactory:
XmlBeanFactory只提供最基本的IoC容器功能,它主要读取以XML形式定义的BeanDefinition。
(1). XmlBeanFactory源码:
- public class XmlBeanFactory extends DefaultListableBeanFactory {
-
- private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
-
- public XmlBeanFactory(Resource resource) throws BeansException {
- this(resource, null);
- }
-
- public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
- super(parentBeanFactory);
- this.reader.loadBeanDefinitions(resource);
- }
- }
(2).XmlBeanFactory实现IoC容器的基本过程:
-
- ClassPathResource resource = new ClassPathResource(“beans.xml”);
-
- DefaultListableBeanFactory factory = new DefaultListableBeanFactory ();
-
- XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
-
- reader.loadBeanDefinitions(resource);
6.ApplicationContext:
ApplicationContext是一个在BeanFactory基础进行功能扩展的,最常用的IoC容器。
(1).ApplicationContext的源码如下:
- public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory,
- MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
-
- String getId();
-
- String getDisplayName();
-
- long getStartupDate();
-
- ApplicationContext getParent();
-
- AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
- }
(2).ApplicationContext的特性:
ApplicationContext是Spring提供的一个高级的IoC容器,它除了能够提供IoC容器的基本功能外,还为用户提供了以下的附加服务:
a.支持不同的信息源:
ApplicationContext扩展了MessageSource接口,可以支持国际化的实现。
b.访问资源:
ApplicationContext继承了DefaultResourceLoader的子类,通过ResourceLoader和Resource的支持,ApplicationContext可以加载不同地方的Bean定义资源文件,尤其可以从不同IO途径获取Bean定义信息。可以使用户程序灵活地定义Bean定义信息。
c.支持应用事件:
ApplicationContext继承了ApplicationEventPublisher接口,在程序上下文中引入了事件机制,这些事件和Bean生命周期的结合为Bean的过来提供了便利。
以上的这些图先对Spring IoC容器的类体系结构做一个宏观的认识,由于平时比较忙,以后抽空再逐步补充IoC容器初始化和依赖注入相关的内容。
转载:
http://blog.csdn.net/chjttony/article/details/6248682
分享到:
相关推荐
《Spring技术内幕》学习笔记1——IoC容器体系结构 《Spring技术内幕》学习笔记2——IoC定位Bean定义资源 《Spring技术内幕》学习笔记3——IoC容器载入Bean定义资源文件 《Spring技术内幕》学习笔记4——IoC容器...
Java-Spring-SpringIoC容器-SpringIoC的学习 SpringIoC容器的学习笔记 主要介绍了IoC容器工作原理以及如何配置IoC容器 通过标签和注解配置容器
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
Spring IoC容器实现的结构分析
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
Spring技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...
讲的非常不错的Spring书籍,特别有利于对IOC容器的理解,特别推荐哦
Spring注解驱动开发第41讲——Spring IOC容器创建源码解析(一)之BeanFactory的创建以及预准备工作(合起来整个过程)
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
使用spring的Ioc容器组装各种组件总结
Spring源代码解析(一):IOC容器.doc
×××Spring 技术内幕.zip.001 ×××Spring 技术内幕.zip.002 本书是spring领域的问鼎之作,由业界拥有10余年开发经验的资深java专家亲自执笔!java开发者社区和spring开发者社区一致强烈推荐。. 国内第一本...
迷你书是《Spring揭秘》的精选版,节选了原书中介绍Spring IoC容器的6个章节。《Spring揭秘》以幽默生动的语言、辅以有趣的故事和典故,循循善诱地阐述了Spring框架的方方面面。针对Spring框架的主要功能以及开发者...
自己动手实现Spring IoC容器, 写Spring IOC容器.wps写Spring IOC容器.wps写Spring IOC容器.wps
spring-IOC的一些笔记心得
【SSH进阶之路】一步步重构容器实现Spring的IoC——解决容器对组件的“侵入式”管理的两种方案--服务定位器和IoC容器(九) 【SSH进阶之路】一步步重构容器实现Spring的IoC——工厂+反射+配置文件实现IoC容器(十)
IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法 。... 在Spring中实现控制反转的是IOC容器 ,其 实现方法是依赖注入 (Dependency Injection,DI)