spring学习--BeanFactory和BeanDefinition

目录

  • BeanFactory介绍
  • BeanDefinition介绍

1. BeanFactory介绍

spring bean的创建是典型的一个工厂模式,其中BeanFactory作为最顶层的一个接口类,它定义了一个IOC容器的基本功能规范,它只对IOC容器的基本行为做了定义,只关心得到的是什么对象,根本不管你的bean时如何定义加载。

1.1 类图继承关系

DefaultListableBeanFactory继承关系图

BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。最后的默认实现类为DefaultListableBeanFactory。为什么要定义这么多层的接口呢,主要时因为不同接口有不同的应用场景,它主要是为了区分在Spring内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。

1.2 接口名称和作用

接口名作用
BeanFactory提供获取bean,是否包含bean,是否单例与原型,获取bean类型,bean 别名的api
ListableBeanFactory提供容器内bean实例的枚举功能.这边不会考虑父容器内的实例.
HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean 有可能有父Bean。
AutowireCapableBeanFactory添加集成其他框架功能

1.3 最基本BeanFactory接口

public interface BeanFactory {
    //对FactoryBean 的转义定义,因为如果使用bean 的名字检索FactoryBean 得到的对象是工厂生成的对象,
    //如果需要得到工厂本身,需要转义
    String FACTORY_BEAN_PREFIX = "&";

    //根据bean 的名字,获取在IOC 容器中得到bean 实例
    Object getBean(String name) throws BeansException;

    //根据bean 的名字和Class 类型来得到bean 实例,增加了类型安全验证机制。
    Object getBean(String name, Class requiredType) throws BeansException;

    //提供对bean 的检索,看看是否在IOC 容器有这个名字的bean
    boolean containsBean(String name);

    //根据bean 名字得到bean 实例,并同时判断这个bean 是不是单例
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

    //得到bean 实例的Class 类型
    Class getType(String name) throws NoSuchBeanDefinitionException;

    //得到bean 的别名,如果根据别名检索,那么其原名也会被检索出来
    String[] getAliases(String name);
}

1.4 容器实现:

  1. XmlBeanFactory
    针对的是最基本的IOC容器的实现,读取XML文件定义的BeanDefinition
  2. ClasspathXmlApplicationContext
  • 支持信息源,可以实现国际化(实现MessageSource 接口)
  • 访问资源
  • 支持应用事件。(实现ApplicationEventPublisher 接口)

2. BeanDefinition介绍

SpringIOC 容器管理了我们定义的各种Bean 对象及其相互的关系,Bean 对象在Spring 实现中是以BeanDefinition 来描述的,其继承体系如下:
RootBeanDefinition继承图
Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean的解析主要就是对Spring 配置文件的解析。这个解析过程主要通过下图中的类完成
BeanDefinitionReader图


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值