zoukankan      html  css  js  c++  java
  • BeanFactory

    前言

       spring ioc容器的实现,从根源上是beanfactory,但真正可以作为一个可以独立使用的ioc容器是DefaultListableBeanFactory

    1.BeanFactory体系结构图 

    一个最简单的BeanFactory的使用样例只需要几行代码:

    BeanFactory beanFactory = new DefaultListableBeanFactory();
    Resource resource = new ClasspathResource("beans.xml");
    XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
    reader.loadBeanDefinitions(resource);

    AbstractBeanFactory实现了依赖关系处理

    AbstractAutowireCapleBeanFactory实现了bean的create过程 

    DefaultListableBeanFactory实现了BeanDefinition的管理

    下面看看beanfactory各接口功能的定义

    1.首先是顶层的BeanFactory,从它的定义方法来看,主要提供获取Bean对象,判断给定的Bean对象是否被当前的BeanFactory加载过,是否是Singleton/Prototype,类型是否匹配,等等最基本的功能。

    2.左边分支:ListableBeanFactory,此接口继承了BeanFactory的同时,提供了列举Bean的功能,它能够列举当前BeanFactory加载的所有bean:列举所有Bean的名字或者满足某种类型的bean的名字,根据类型返回所有bean对象等。但是它无法获取父层BeanFactory加载的单例bean

    3.看中间分支:HierachicalBeanFactory和ConfigurableBeanFactory,AutowireCapableBeanFactory

        HierachicalBeanFactory比较简单,它主要提供父BeanFactory的功能,通过它能够获取当前BeanFactory的父BeanFactory。(比如,若在A工厂启动并加载bean之前,B工厂先启动并加载了,那B就是A的父工厂),这样就能让当前的beanfactory加载父beanfactory加载的bean了,弥补了ListableBeanFactory欠缺的功能。

        ConfigurableBeanFactory就是在HierachicalBeanFactory的基础上增加了可配置的功能,包括注册别名、注册单例、设置classloader、是否缓存BeanMetadata、设置BeanPostProcessor、配置Bean依赖等等。ConfigurableBeanFactory还继承了SingletonBeanRegistry接口主要是用来定义用来共享的bean实例的注册表,通过它可以使得BeanFactory实现统一的方式暴露其单例bean管理。

      AutowireCapableBeanFactory,主要是提供Bean的自动装配功能,为已有的Bean装配属性等

    4.再看右边分支

      先是 SingletonBeanRegisty/DefautSigletonBeanRegistry/FactoryBeanRegistrySupport

    SigletonBeanRegistry在前面已提到,DefaultSigletonBeanRegistry是它的默认实现类,它不仅支持SigletonBean的注册,也支持DisposableBean的注册管理用来清理要丢弃的bean以及他们依赖的资源。

    FactoryBeanRegistrySupport主要是对FactoryBean的支持,获取FactoryBean、FactoryBean的类型,获取FactoryBean暴露的目标对象等。

      再是AbatractAutowireCapableBeanFacotry,实现AutowireCapableBeanFactory接口的bean装配功能,实现createBean autowireBean configBean()等方法。

    DefaultListableBeanFactory继承AbatractAutowireCapableBeanFacotry功能的同时再实现了ConfigurableListableBeanFactory的功能,主要是实现了BeanDefinition的管理

    2.

                         

  • 相关阅读:
    LeetCode 788. Rotated Digits
    LeetCode 606. Construct String from Binary Tree
    LeetCode 13. Roman to Integer
    LeetCode 387. First Unique Character in a String
    LeetCode 520. Detect Capital
    LeetCode 557. Reverse Words in a String III
    RSA加密算法及其与SpringMVC集成
    用phantomjs 进行网页整页截屏
    redis应用场景
    MQ产品比较-ActiveMQ-RocketMQ
  • 原文地址:https://www.cnblogs.com/whx7762/p/7793855.html
Copyright © 2011-2022 走看看