Spring源码分析一:BeanFactory接口详解

Spring源码分析-BeanFactory接口

1.Beanfactory适用场景

BeanFactory提供了最基本的IoC容器的功能,是Ioc容器最基本的表现形式。BeanFactory是一个接口类,下面是Ioc容器中的主要接口设计

在这里插入图片描述

SpringIoc容器的主要接口

  • BeanFactory 定义了Ioc容器的基本规范,包括getBean这样的Ioc容器的基本方法
    • HierarchiaclBeanFactory 提供getParentBeanFactory方法,允许访问父容器。
      • ConfigurableBeanFactory 定义了一些对BeanFactory的配置功能。比如通addBeanPostProcessor配置Bean后置处理器,setParentBeanFactory设置双亲Ioc容器。

从接口BeanFactory到HierarchiaclBeanFactory,再到ConfigurableBeanFactory是一条主要的BeanFactory设计路径。在这条接口路径设计中,BeanFactory接口定义了基本的Ioc容器规范


  • ListableBeanFactory 细化了许多BeanFactory的接口功能,比如定义了getBeanDefinitionNames 该方法用于获取SpringIoc容器中定义的所有Bean的名称。
    • ApplicationContext 它通过继承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory简单Ioc容器的基础上添加了许多对高级容器特性的支持。

第二条接口设计主线是,以ApplicationContext应用上线文接口为核心的接口设计。我们常用的WebApplicationContext或者ConfigurableApplitionContext接口, AnnotationConfigApplicationContext接口。

具体的Ioc容器都是在上面的接口体系下实现的,比如DefaultListableBeanFactory,这个基本的Ioc容器就是实现ConfigurableBeanFactory,从而成为一个简单Ioc容器的实现。XmlBeanFactory,ApplicationContext是在上面的基础上进行扩展。

BeanFactory的接口定义,API说明

名称方法描述返回值code
getBean根据name获得bean实例,如果在本工厂中没有找到bean则需要在父工厂中寻找ObjectObject getBean(String name) throws BeansException;
containsBean根据所给的name判断是否有对应的beandefinition,如果在本工厂实例中找不到对应的bean,那么就会去父工厂中寻找,3.陷阱出现:这边不管类是否抽象类,懒加载,是否在容器范围内,只要符合都返回true,所以这边true,不一定能从getBean获取实例boolean ,boolean containsBean(String name);
isSingleton判断获得的bean是否为单例实例,如果是,那么每次调用getBean返回的是同一个对象booleanboolean isSingleton(String name) throws NoSuchBeanDefinitionException;
getType根据name,获得对应bean的类型信息ClassClass getType(String name) throws NoSuchBeanDefinitionException;
getAliases根据name,返回对应的bean的别名String[]Sting[] getAliases(String name)
isPrototype是否是prototype类型,这个属性可以由用户在BeanDefinition中指定booleanboolean isPrototype(String name)

由上面一系列的接口方法,可以使用不同的Bean的检索方法,很方便的从Ioc容器中得到需要的bean。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值