(一)IOC容器系列的设计与实现:BeanFactory和ApplicationContext

一,综述

        在spring IOC容器的设计中,有两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,只实现了容器的基本功能

一个是ApplicationContext应用上下文,它作为容器的高级形态存在。应用上下文在简单容器的基础上增加了许多面向框架的特性,同时

对应用环境做了许多适配。

         在spring提供基的基本IOC容器的接口定义和实现的基础上,Spring通过定义BeanDefinition来管理基于Spring的应用中的各种对象以及

他们之间的依赖关系。简单说BeanDefinition 就是 依赖关系的数据结构

二,Spring IOC 容器的设计


(图由Astah完成) 

下面对接口做一些简要的分析

  • 第一条,BeanFactory--》HierarchicalBeanFactory--》ConfigurableBeanFactory 主要设计路径,其中
            BeanFactory定义了基本的IOC容器的规范;

            HierarchicalBeanFactory继承BeanFactory基础上增加了getParentBeanFactory()接口功能,使BeanFactory具备了双亲IOV容器的管理功能

            ConfigurableBeanFactory 主要定义了对BeanFactory的配置功能,比如setParentBeanFactory()设置双亲IOC容器

  • 第二条,以ApplicationContext应用上下文为核心的接口设计。
  • 这里涉及的主要是接口关系,而具体的IOC容器都是在这个接口体系下实现的。
  • 总结,这个接口系统是以BeanFactory和ApplicationContext为核心的。而BeanFactory又是IOC容器的最基本接口,
        ApplicationContext它继承了BeanFactory接口体系中的ListableBeanFactory,AutowireCapableBeanFactory,HierarchicalBeanFactory

        等接口,具备基本的容器功能;另一方面又继承了MessageSource,ResouceLoader,ApplicationEventPublisher这些接口,赋予了更高级的IOC

        容器特性等等。


三,BeanFactory的应用场景

getBean();这个方法是使用IOC容器API的主要方法。其中可以通过prototype来确定指定的bean

此外提供一下方法:

public interface Beanfactory {
       String FACTORY_BEAN_PREFIX = “&”;
       Object getBean (String name) throws BeansException;
       <T> T getBean(String name, Class<T> requredType) throws BeansException;
       Object getBean (String name,,Object... args) throws BeansException;
       boolean containsBean(String name);
       boolean isSingleton(String name) throws NoSuchBeanFactoryDefinitionException;
       boolean isPrototype(String name) throws NoSuchBeanFactoryDefinitionException;
       boolean isTypeMatch(String name) throws NoSuchBeanFactoryDefinitionException;
       Class getType(String name) throws NoSuchBeanFactoryDefinitionException;
       String[] getAliases(Stirng name);
}

这些接口方法是最为基本的容器入口。


四,BeanFactory容器的设计原理

注意:DefaultListableFactory 最重要的一个类。已经作为容器系列中的一个基本产品

编程式使用IOC容器

ClassPathResource res = new ClassPathResource("bean.xml");

DefaultListableBeanFactory factory = new DefaultListableBeanFactory();

XmlBeaDefinitionReader reader = new XmlBeaDefinitionReader (factory);

reader.loadBeanDefinitions(res);

这样我们就可以通过factory 对象来 使用 DefaultListableBeanFactory这个IOC容器 

在使用IOC容器时需要如下几个步骤

1.创建IOC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息

2.创建一个BeanFactory,这里使用DefaultListableFactory。

3.创建一个载入BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFacory。

4.从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册Bean定义后,需要的IOC容器就创立起来了。


 





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值