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 getBean(String name, Class requiredType) throws BeansException;
根据指定的名字和类型取得IoC容器中管理的Bean,和getBean(String name)方法类似,只是多提供了一个类型安全验证机制。
(3). T getBean(Class 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源码:
[java]
view plain
copy
print
?
- public class XmlBeanFactory extends DefaultListableBeanFactory {
- //读取XML形式的Bean定义,然后解析XML生成IoC管理的Bean
- private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
- //Resouce是Spring中用来封装IO操作的接口
- public XmlBeanFactory(Resource resource) throws BeansException {
- this(resource, null);
- }
- //调用父类的构造方法,同时调用loadBeanDefinitions方法从指定XML文件加载Bean定义
- public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
- super(parentBeanFactory);
- this.reader.loadBeanDefinitions(resource);
- }
- }
public class XmlBeanFactory extends DefaultListableBeanFactory {//读取XML形式的Bean定义,然后解析XML生成IoC管理的Bean private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this); //Resouce是Spring中用来封装IO操作的接口 public XmlBeanFactory(Resource resource) throws BeansException { this(resource, null); }//调用父类的构造方法,同时调用loadBeanDefinitions方法从指定XML文件加载Bean定义 public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException { super(parentBeanFactory); this.reader.loadBeanDefinitions(resource); }}
(2).XmlBeanFactory实现IoC容器的基本过程:
[java]
view plain
copy
print
?
- //创建IoC容器管理的Bean的xml配置文件,即定位资源
- ClassPathResource resource = new ClassPathResource(“beans.xml”);
- //创建BeanFactory
- DefaultListableBeanFactory factory = new DefaultListableBeanFactory ();
- //创键Bean定义读取器
- XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
- //使用Bean定义读取器读入Bean配置信息,即载入配置
- reader.loadBeanDefinitions(resource);
//创建IoC容器管理的Bean的xml配置文件,即定位资源ClassPathResource resource = new ClassPathResource(“beans.xml”);//创建BeanFactoryDefaultListableBeanFactory factory = new DefaultListableBeanFactory ();//创键Bean定义读取器XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);//使用Bean定义读取器读入Bean配置信息,即载入配置reader.loadBeanDefinitions(resource);
6.ApplicationContext:
ApplicationContext是一个在BeanFactory基础进行功能扩展的,最常用的IoC容器。
(1).ApplicationContext的源码如下:
[java]
view plain
copy
print
?
- public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory,
- MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
- //获取ApplicationContext的id
- String getId();
- //获取ApplicationContext的displayName
- String getDisplayName();
- //获取ApplicationContext第一次加载的时间戳
- long getStartupDate();
- //获取ApplicationContext容器的父容器
- ApplicationContext getParent();
- //获取自动装配功能的BeanFactory
- AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
- }
public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver { //获取ApplicationContext的id String getId(); //获取ApplicationContext的displayName String getDisplayName(); //获取ApplicationContext第一次加载的时间戳 long getStartupDate(); //获取ApplicationContext容器的父容器 ApplicationContext getParent(); //获取自动装配功能的BeanFactory 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容器初始化和依赖注入相关的内容。