Spring Bean 的创建是典型的工厂模式,这一系列的Bean 工厂,也即IOC 容器为开发者管理对象间的依赖关系提供了很多便利和基础服务,在Spring 中有许多的IOC 容器的实现供用户选择和使用,其相互关系如下:

其中BeanFactory 作为最顶层的一个接口类,它定义了IOC 容器的基本功能规范,BeanFactory 有三个重要的子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是从类图中我们可以发现最终的默认实现类是DefaultListableBeanFactory,它实现了所有的接口。

那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有它使用的场合,它主要是为了区分在Spring 内部在操作过程中对象的传递和转化过程时,对对象的数据访问所做的限制。例如ListableBeanFactory 接口表示这些Bean 是可列表化的,而HierarchicalBeanFactory 表示的是这些Bean 是有继承关系的,也就是每个Bean 有可能有父Bean。AutowireCapableBeanFactory 接口定义Bean 的自动装配规则。这三个接口共同定义了Bean 的集合、Bean 之间的关系、以及Bean 行为。最基本的IOC 容器接口BeanFactory,来看一下它的源码:

public interface BeanFactory {//对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,//如果需要得到工厂本身,需要转义String FACTORY_BEAN_PREFIX = "&";//根据bean的名字,获取在IOC容器中得到bean实例Object getBean(String name) throws BeansException;//根据bean的名字和Class类型来得到bean实例,增加了类型安全验证机制。<T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException;Object getBean(String name, Object... args) throws BeansException;<T> T getBean(Class<T> requiredType) throws BeansException;<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;//提供对bean的检索,看看是否在IOC容器有这个名字的beanboolean containsBean(String name);//根据bean名字得到bean实例,并同时判断这个bean是不是单例boolean isSingleton(String name) throws NoSuchBeanDefinitionException;boolean isPrototype(String name) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinitionException;//得到bean实例的Class类型@NullableClass<?> getType(String name) throws NoSuchBeanDefinitionException;//得到bean的别名,如果根据别名检索,那么其原名也会被检索出来String[] getAliases(String name);}

在BeanFactory 里只对IOC 容器的基本行为作了定义,根本不关心你的Bean 是如何定义怎样加载的。正如我们只关心工厂里得到什么的产品对象,至于工厂是怎么生产这些对象的,这个基本的接口不关心。

而要知道工厂是如何产生对象的,我们需要看具体的IOC 容器实现,Spring 提供了许多IOC 容器的实现。比如GenericApplicationContext , ClasspathXmlApplicationContext 等。

ApplicationContext 是Spring 提供的一个高级的IOC 容器,它除了能够提供IOC 容器的基本功能外,还为用户提供了以下的附加服务。从ApplicationContext 接口的实现,我们看出其特点:

1、支持信息源,可以实现国际化。(实现MessageSource 接口)

2、访问资源。(实现ResourcePatternResolver 接口,后面章节会讲到)

3、支持应用事件。(实现ApplicationEventPublisher 接口)

Spring 核心容器类BeanFactory相关推荐

  1. Spring 核心容器类BeanDefinitionReader

    Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化.Bean 的解析主要就是对Spring 配置文件的解析.这个解析过程主要通过Bea ...

  2. Spring 核心容器类BeanDefinition

    SpringIOC 容器管理了我们定义的各种Bean 对象及其相互的关系,Bean 对象在Spring 实现中是以BeanDefinition 来描述的,其继承体系如下:

  3. 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  4. Spring核心——IOC处理器扩展

    为什么80%的码农都做不了架构师?>>>    非侵入式框架 Spring一直标注自己是一个非侵入式框架.非侵入式设计的概念并不新鲜,目标就是降低使用者和框架代码的耦合,毕竟框架的开 ...

  5. spring核心功能结构

    spring核心功能结构 Spring大约有20个模块,由1300多个不同的文件构成.这些模块可以分为: 核心容器.AOP和设备支持.数据访问与集成.Web组件.通信报文和集成测试等, 下面是 Spr ...

  6. java 切面_Java笔试面试精心整理得到89道Spring 核心知识【收藏向】

    点击上方"蓝字",关注了解更多 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 ...

  7. Spring核心系列之ApplicationContext

    Spring核心系列之ApplicationContext Hello,大家好,今天开始,小弟准备推出Spring系列的博客,希望大家喜欢.关于Spring其实我就不用再多介绍了,做过Web开发的,基 ...

  8. spring核心:bean工厂的装配 2

    本文继续上面的 spring核心:bean工厂的装配系列.主要包含: 3.使用构造函数创建bean 4.使用静态工厂方法创建bean 5.使用非静态工厂方法创建bean 6.bean的标识符 3.使用 ...

  9. 小白初写Spring核心容器功能

    Spring核心容器功能 1.spring优点 方便解耦,简化开发 AOP编程的支持 申明式事务的支持 方便程序的测试等等 一,Spring模块架构图 core container : 核心容器,是s ...

最新文章

  1. 一个android记事本的学习过程记录! (一)
  2. mybatis中(Oracle)关于insert时主键自动加1的使用方法
  3. javascript中实现读取指定格式的日期(format)
  4. Python 简单入门指北(二)
  5. simple go web application 二维码生成 打包部署
  6. IDEA中使用maven下载速度很慢时的解决办法
  7. html gridview绑定数据,winform,devexpress GridControl中GridView数据绑定
  8. 【每日一题】8月7日题目精讲—双栈排序
  9. 一个application多个 URL
  10. vue生命周期,vue执行顺序图,钩子函数
  11. 乾坤大挪移——冒泡法排序,良心之作,拒绝入坑
  12. win10怎么进入修复计算机,windows10安全模式怎么修复系统_win10安全模式如何修复电脑...
  13. Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)
  14. googlemap 两点间平滑移动_Salomon萨洛蒙徒步登山鞋实测,一双在山林与城市间探索的户外鞋...
  15. Matlab 获取主板、硬盘、CPU、BIOS和网卡序列号
  16. Origin 2017安装教程(附有下载链接)
  17. Golang底层原理剖析之panic与recover
  18. amc 美国数学竞赛能用计算机吗,关于AMC美国数学竞赛的QA
  19. VBA批量导入图片到多Word文档并加标题(会飞的鱼)
  20. 用Python快速采集ins视频

热门文章

  1. MM的Windows 7 登录密码忘记之后
  2. 面试题之第一部分(Python基础篇) 80题
  3. [No0000142]Outlook通过添加签名 自动添加邮件模板
  4. setTimeout setInterval
  5. 转!Java关键字final、static使用总结
  6. javascript代码解释执行过程
  7. HTML5 文件操作API
  8. 控件属性、事件持久化(转)
  9. JavaScript对数组的处理(一)
  10. 如何删除Windows 7的保留分区