zoukankan      html  css  js  c++  java
  • BeanFactory和ApplicationContext

    BeanFactory是一个类的通用工厂,可以创建并管理各种类的对象

    Bean工厂是Spring框架最核心的接口,它提供了高级Ioc的配置机制。BeanFeactory使管理不同类的Java对象成为可能,而ApplicationContext建立在BeanFactory基础之上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用。我们一般称BeanFactory为IoC容器,称ApplicationContext为应用上下文或Spring容器。

    beanFactory主要的方法就是getBean,其他功能都是通过其他接口得到不断扩展。
    ListableBeanFactory: 该接口定义了访问容器中Bean基本信息的若干方法,如查看Bean的个数、获取某一类型Bean的配置名、查看容器中是否包括某一Bean等。
    HierarchicalBeanFactory:父子级联IoC容器的接口,子容器可以通过接口方法访问父容器。
    ConfigurableBeanFactory:这是一个重要的借口,增强了IOC容器的可定制性。塌地你故意了设置类装载器。属性编辑器、容器初始化后置处理器等方法。
    AutowireCapableBeanFactory:定义了将容器中的Bean按照=某种规则进行自动装配的方法。
    SingletonBeanRegistry:定义了允许在运行期向容器注册单实例Bean的方法。
    BeanDefinitionRegistry:Spring配置文件中每一个<bean>节点元素在Spring容器里都通过一个BeanDefinition对象表示,它描述了Bean的配置信息。而BeanDefinition Registry接口提供了向容器手工注册BeanDefinition对象的方法
     
    初始化BeanFactory:
        XmlBeanDefinitionReader通过Resource装载Spring配置信息并启动IoC容器,然后通过BeanFactory.getBean方法从IoC容器中获取Bean。BeanFactory启动Ioc容器时,并不会初始化配置文件中定义的Bean,初始化动作发生在第一个调用时,对于单实例的Bean来说,BeanFactory会缓存Bean实例,所以第二次使用getBean()获取Bean时,将直接从IoC容器的缓存中获取Bean实例。
        Spring在DefaultSingletonBeanRegistry类中提供了一个用于缓存单实例Bean的缓存器,它是一个用HashMap实现的缓存器,但实力的Bean以beanName为键保存在这个HashMap中。
    ApplicationContext:
    ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。
     
    ApplicationContext继承了HierarchicalBeanFactory和ListableBeanFactory接口,在此基础上,还通过多个其他的接口扩展了BeanFactory的功能,这些接口如下:
    ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动时间、关闭事件等。实现了ApplicationListener事件监听接口的Bean可以接收到容器事件,并对事件进行相应处理。在AplicationContext抽象实现类AbstractApplicationContext中存在一个ApplicationEventMulticaster,它负责保存所有的监听器,以便在容器产生上下文事件时通知这些事件监听者。
    MessageSource:为应用提供il8n国际化消息访问的功能。
    ResourcePatternResolver:所有ApplicationContext实现类都实现了类似于PathMatchingResourcePatternResolver的功能,可以通过带前缀的Ant风格的资源文件路径装载Spring的配置文件。
    LifeCycle:该接口共识被ApplicationContext实现及具体Bean实现,ApplicationContext会将start/stop 的信息传递给容器中所有实现了该接口的Bean,以达到管理和控制JMX、任务调度等面对。
     
    ConfigurableApplicationContext 扩展与ApplicationContext,它新增了两个主要的方法:refresh()和close(),让ApplicationContext具有启动、刷新和关闭应用上下文的能力。
     
    ApplicationContext的初始化很简单,如果配置文件放置在类路径下,则可以优先考虑使用ClassPathXmlApplicationContext实现类,如果放置在文件系统的路径下,则优先考虑使用FileSystemXmlApplicationContext实现类。
    ApplicationContext的初始化和BeanFactory有一个重大的缺别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例化目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有的单实例的Bean。因此ApplicationContext的初始化时间回避BeanFactory稍长一些
  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/gqymy/p/9216674.html
Copyright © 2011-2022 走看看