Spring 核心容器类BeanFactory
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相关推荐
- Spring 核心容器类BeanDefinitionReader
Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化.Bean 的解析主要就是对Spring 配置文件的解析.这个解析过程主要通过Bea ...
- Spring 核心容器类BeanDefinition
SpringIOC 容器管理了我们定义的各种Bean 对象及其相互的关系,Bean 对象在Spring 实现中是以BeanDefinition 来描述的,其继承体系如下:
- 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- Spring核心——IOC处理器扩展
为什么80%的码农都做不了架构师?>>> 非侵入式框架 Spring一直标注自己是一个非侵入式框架.非侵入式设计的概念并不新鲜,目标就是降低使用者和框架代码的耦合,毕竟框架的开 ...
- spring核心功能结构
spring核心功能结构 Spring大约有20个模块,由1300多个不同的文件构成.这些模块可以分为: 核心容器.AOP和设备支持.数据访问与集成.Web组件.通信报文和集成测试等, 下面是 Spr ...
- java 切面_Java笔试面试精心整理得到89道Spring 核心知识【收藏向】
点击上方"蓝字",关注了解更多 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 ...
- Spring核心系列之ApplicationContext
Spring核心系列之ApplicationContext Hello,大家好,今天开始,小弟准备推出Spring系列的博客,希望大家喜欢.关于Spring其实我就不用再多介绍了,做过Web开发的,基 ...
- spring核心:bean工厂的装配 2
本文继续上面的 spring核心:bean工厂的装配系列.主要包含: 3.使用构造函数创建bean 4.使用静态工厂方法创建bean 5.使用非静态工厂方法创建bean 6.bean的标识符 3.使用 ...
- 小白初写Spring核心容器功能
Spring核心容器功能 1.spring优点 方便解耦,简化开发 AOP编程的支持 申明式事务的支持 方便程序的测试等等 一,Spring模块架构图 core container : 核心容器,是s ...
最新文章
- 一个android记事本的学习过程记录! (一)
- mybatis中(Oracle)关于insert时主键自动加1的使用方法
- javascript中实现读取指定格式的日期(format)
- Python 简单入门指北(二)
- simple go web application 二维码生成 打包部署
- IDEA中使用maven下载速度很慢时的解决办法
- html gridview绑定数据,winform,devexpress GridControl中GridView数据绑定
- 【每日一题】8月7日题目精讲—双栈排序
- 一个application多个 URL
- vue生命周期,vue执行顺序图,钩子函数
- 乾坤大挪移——冒泡法排序,良心之作,拒绝入坑
- win10怎么进入修复计算机,windows10安全模式怎么修复系统_win10安全模式如何修复电脑...
- Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)
- googlemap 两点间平滑移动_Salomon萨洛蒙徒步登山鞋实测,一双在山林与城市间探索的户外鞋...
- Matlab 获取主板、硬盘、CPU、BIOS和网卡序列号
- Origin 2017安装教程(附有下载链接)
- Golang底层原理剖析之panic与recover
- amc 美国数学竞赛能用计算机吗,关于AMC美国数学竞赛的QA
- VBA批量导入图片到多Word文档并加标题(会飞的鱼)
- 用Python快速采集ins视频