springIOC源码接口分析(二):ConfigurableBeanFactory
一 继承功能

1 SingletonBeanRegistry接口
此接口是针对Spring中的单例Bean设计的。提供了统一访问单例Bean的功能,类中定义了以下方法:

2 HierarchicalBeanFactory接口使容器具备了双亲功能
二 定义方法以及属性
接口首先定义了两个String属性:

这两个是用来标明注册的对象作用域,一个标明注册的对象是单例的,另一个标明注册的对象是原型拷贝的
这个接口是spring框架中非常重要的一个接口,定义了非常多的方法,总共三十多个,包括类加载器,类型转化,属性编辑器,BeanPostProcessor,作用域
,bean定义,bea创建状态,处理bean依赖关系,合并其他ConfigurableBeanFactory,bean如何销毁等,下面是具体方法:
String SCOPE_SINGLETON = "singleton";//单例
String SCOPE_PROTOTYPE = "prototype";//原型 /**
* 设置容器的父容器,获取父容器方法在父接口HierarchicalBeanFactory里
*/
void setParentBeanFactory(BeanFactory parentBeanFactory) throws IllegalStateException; /**
* 设置和获取类加载器,主要用于加载Bean,默认是线上上下文的loader
*/
void setBeanClassLoader(@Nullable ClassLoader beanClassLoader);
@Nullable
ClassLoader getBeanClassLoader(); /**
* 设置获取临时类加载器
*/
void setTempClassLoader(@Nullable ClassLoader tempClassLoader);
@Nullable
ClassLoader getTempClassLoader(); /**
* 设置是否缓存给定BeanDefinition和确定Bean类型的元数据,默认是开启状态.
* 关掉flag缓存会启用beanDefinition对象的热刷新.任何bean实例的创建都将重新查询bean class loader来确定这个Bean最新的类型
*/
void setCacheBeanMetadata(boolean cacheBeanMetadata);
boolean isCacheBeanMetadata(); /**
* 为beanDefinition值中的表达式提供解决策略.默认的BeanFactory里是没有激活的表达式支持的.
* 一个ApplicationContext通常会设置一个标准的表达式策略,以一种统一的EL兼容风格支持“#{}”表达式.
*/
void setBeanExpressionResolver(@Nullable BeanExpressionResolver resolver);
@Nullable
BeanExpressionResolver getBeanExpressionResolver(); /**
* 设置和获取ConversionService接口,进行数据类型转换
* @param conversionService
*/
void setConversionService(@Nullable ConversionService conversionService);
@Nullable
ConversionService getConversionService(); /**
* 添加一个PropertyEditorRegistrar应用于所有bean的创建过程.
* 一个Registrar创建了一个新的PropertyEditor实例,并且会将他们注册到一个给定的Registry中,并尝试刷新每个bean的创建.
* 这就避免了自定义Editor的同步应用需求.因此通常更倾向于使用这个方法来代替registerCustomEditor.
*/
void addPropertyEditorRegistrar(PropertyEditorRegistrar registrar); /**
* 为所有给定类型的属性注册一个给定的自定义属性编辑器.通常在factory配置期间被调用.
* 注意这个方法注册一个共享的自定义属性编辑器实例;为了线程安全,需要授权该实例去进行同步操作.
* 通常更倾向于使用addPropertyEditorRegistrar来代替这个方法,这就避免了自定义编辑器同步的需要
*/
void registerCustomEditor(Class<?> requiredType, Class<? extends PropertyEditor> propertyEditorClass); /**
* 使用一个已经在BeanFactory里注册过的自定义属性编辑器来初始化给定的PropertyEditorRegistry.
*/
void copyRegisteredEditorsTo(PropertyEditorRegistry registry); /**
* 设置或获取自定义的类型转换器,BeanFactory用它来对Bean的属性值,构造参数等进行转换.这将会覆盖默认的PropertyEditor机制,
* 因此,使用无关的自定义Editor或自定义Editor Registrars.因为TypeConverter通常不是线程安全的,所以每次调用都会产生一个新的实例.
* 如果默认的PropertyEditor机制被激活,获取typeConverter方法将会返回所有已被注册的自定义的typeConverter
*/
void setTypeConverter(TypeConverter typeConverter);
TypeConverter getTypeConverter(); /**
* 用来增加一个嵌入式的StringValueResolver,比如说注解的属性.可以参考SpringMVC中的ArgumentResolver.
*/
void addEmbeddedValueResolver(StringValueResolver valueResolver); /**
* 确定是否有一个嵌入式的value resolver已经在这个bean factory中注册了,并且可以通过resolveEmbeddedValue函数来应用.
*/
boolean hasEmbeddedValueResolver(); /**
* 决定一个给定的嵌入式的值,例如注解中的属性
*/
@Nullable
String resolveEmbeddedValue(String value); /**
*添加一个新的BeanPostProcessor,通过这个工厂所创建的beans将会应用这个后置处理器.
* 在工厂的配置期间调用.注意这里的Post-processor提交将会按着registration的顺序被依次应用.
* 任何通过Ordered这个接口所实现的顺序语义将会被忽略.也要注意到自动检测的后置处理器将会在以编程方式注册的那些后置处理器之后执行.
*/
void addBeanPostProcessor(BeanPostProcessor beanPostProcessor); //获取已经注册的Bean后置处理器的个数
int getBeanPostProcessorCount(); /**
*注册一个给定的scope,支持Scope的实现类.
*/
void registerScope(String scopeName, Scope scope); /**
* 返回所有当前注册过的scope的名字.这个方法只返回明确注册过的scope的名字,内置的(Built-in)scopes像”singleton”和”prototype”不会被暴露.
* 如果没有返回的是空数组.
*/
String[] getRegisteredScopeNames(); /**
* 如果有的话,返回给定名字的Scope实现.和上一个函数一样,将只返回明确注册过的scope,内置的(Built-in)scopes像”singleton”和”prototype”不会被暴露.
*/
@Nullable
Scope getRegisteredScope(String scopeName); /**
* 提供一个与这个工厂相关的安全的访问控制上下文.这个绝不会为空.
*/
AccessControlContext getAccessControlContext(); /**
* 从给定的工厂中拷贝所有相关的配置信息.应该包括了所有标准的配置,也包括了BeanPostProcessor,Scopes和factory-specific内置的一些配置.
* 应该不包括任何真实Bean的metadata信息,像BeanDefinition对象和bean的别名等
*/
void copyConfigurationFrom(ConfigurableBeanFactory otherFactory); /**
* 给定一个bean的名字,创建它的别名.这个方法的典型应用是支持那些在XML的ids里是无效的名字(被用于Bean的命名).
* 通常都是在factory的配置期间被调用,但是也可以用于别名的registration的运行时.所以一个实现了该函数的接口应该同步别名访问.
*/
void registerAlias(String beanName, String alias) throws BeanDefinitionStoreException; /**
* 处理所有目标名称的别名和在这个工厂注册过的别名,然后为它们应用给定的StringValueResolver.
* 这个value resolver是处理像目标bean名称甚或在别名名称里的占位符而设置的.
*/
void resolveAliases(StringValueResolver valueResolver); /**
* 返回一个给定名字的合并后的BeanDefinition,如果有必要会将子BeanDefinition和父BeanDefinition进行合并.
* 并且也会考虑祖先容器中的BeanDefinition
*/
BeanDefinition getMergedBeanDefinition(String beanName) throws NoSuchBeanDefinitionException; //判断给定名字的Bean是否是一个FactoryBean.
boolean isFactoryBean(String name) throws NoSuchBeanDefinitionException; /**
* 设置Bean的当前创建状态
* @param beanName
* @param inCreation Bean是否正在创建中
*/
void setCurrentlyInCreation(String beanName, boolean inCreation); boolean isCurrentlyInCreation(String beanName); /**
* 为给定名称的Bean注册一个依赖Bean,并且该依赖Bean会在给定的Bean被销毁之前进行销毁
*/
void registerDependentBean(String beanName, String dependentBeanName); /**
*如果有的话,返回依赖于给定名字Bean的所有Bean名称.
*/
String[] getDependentBeans(String beanName); /**
* 如果有的话,返回给定名字Bean所依赖的所有Bean名称.
*/
String[] getDependenciesForBean(String beanName); /**
* 依据BeanDefinition,销毁给定Bean的实例,(通常会从这个工厂中获取一个原型实例).
* 在销毁期间所抛出的任何异常都应该用捕获来取代往这个方法的调用者那里抛出.
*/
void destroyBean(String beanName, Object beanInstance); /**
* 如果有的话,在当前目标Scope中销毁指定的ScopeBean.
* 在销毁期间所抛出的任何异常都应该用捕获来取代往这个方法的调用者那里抛出
*/
void destroyScopedBean(String beanName); /**
* 销毁这个工厂中所有的singleton bean,包括一次性的已经注册的内嵌Bean.在工厂关闭的时候会被调用.
* 在销毁期间所抛出的任何异常都应该用捕获来取代往这个方法的调用者那里抛出.
*/
void destroySingletons();
ConfigurableBeanFactory接口没有被ApplicationContext等常用容器接口所继承,但是一般容器实现类都会继承这个接口,目的是使用一种统一的方式对外暴露他们的单例管理方式.
springIOC源码接口分析(二):ConfigurableBeanFactory的更多相关文章
- springIOC源码接口分析(九):Environment
先贴一下接口继承关系图,spring容器启动的时候会初始化环境,所以此接口相关接口非常有必要进行了解: 一 PropertyResolver接口 Environment继承了该接口,PropertyR ...
- springIOC源码接口分析(八):AutowireCapableBeanFactory
参考博文: https://blog.csdn.net/f641385712/article/details/88651128 一 接口规范 从宏观上看,AutowireCapableBeanFact ...
- springIOC源码接口分析(三):ApplicationContext
一 新增方法 主要都是获取容器基本信息的一些接口,比如获取名称,id和启动时间戳,获取AutowireCapableBeanFactory等接口 二 继承接口 ApplicationContext继承 ...
- springIOC源码接口分析(十一):ConfigurableApplicationContext
一 实现接口 关系图: ConfigurableApplicationContext接口实现了三个接口,ApplicationContext, Lifecycle, Closeable, Applic ...
- springIOC源码接口分析(七):ApplicationEventPublisher
一 定义方法 此接口主要是封装事件发布功能的接口,定义了两个方法: /** * 通知应用所有已注册且匹配的监听器此ApplicationEvent */ default void publishEve ...
- springIOC源码接口分析(六):ResourceLoader
参考博客: https://www.cnblogs.com/jixp/articles/10702486.html 一 定义方法 Spring提供了ResourceLoader接口用于实现不同的Res ...
- springIOC源码接口分析(五):ListableBeanFactory
一 继承关系 该接口是对BeanFactory的扩展,允许预加载bean定义的BeanFactory可以实现此接口 其目的在于使实现它的BeanFactory能够枚举所有的Bean 该接口不支持分层结 ...
- springIOC源码接口分析(一):BeanFactory
一 应用场景 BeanFactory接口定义了IOC容器的最基本功能,提供了容器应该具有的功能规范,所有的容器都应该实现这个接口 BeanFactory设计了getBean方法用来获取容器中的Bean ...
- springIOC源码接口分析(四):MessageSource
一 定义方法 MessageSource接口用于支持信息的国际化和包含参数的信息的替换 这个接口定义了三个方法: public interface MessageSource { /** * 解析co ...
随机推荐
- 查漏补缺:2020年搞定SpringCloud面试(含答案和思维导图)
前言 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都 ...
- 开发板免费领!腾讯云IoT应用创新大赛正式启动!
大赛简介 腾讯云IoT应用创新大赛是腾讯云面向物联网领域举办的大型竞赛,通过腾讯云IoT全链路产品能力,开放平台和服务,与广大开发者共同创新,孵化优秀的IoT产品和解决方案,共同构建IoT应用生态. ...
- java中发送http请求的方法
package org.jeecgframework.test.demo; import java.io.BufferedReader; import java.io.FileOutputStream ...
- Visual Studio 2015 编译生成支持HTTPS协议的libcurl静态库
由于之前的工作需要使用libcurl 开源项目库 在各种研究后发现无法使用HTTPS协议 后来经过各种翻阅文档,发现需要OpenSSL支持,这个需要自己下载并自己编译生成 lib 或者 dll 至于O ...
- CodeIgniter框架多条件搜索查询分页功能解决方案
最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...
- LibreOJ6279. 数列分块入门 3 题解
题目链接:https://loj.ac/problem/6279 题目描述 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,询问区间内小于某个值 \(x\) 的前驱(比其 ...
- 从0开发3D引擎(六):函数式反应式编程及其在引擎中的应用
目录 上一篇博文 介绍函数式反应式编程 函数式反应式编程学习资料 函数式反应式编程的优点与缺点 优点 缺点 异步处理的其它方法 为什么使用Most库 引擎中相关的函数式反应式编程知识点 参考资料 大家 ...
- java序列化(一)
今天我们来探讨一下java的序列化与反序列化.之前对此一直有概念,但是并没有真正的去测试.大家都知道,所谓的序列化就是把java代码读取到一个文件中,反序列化就是从文件中读取出对象.在网络传输过程中, ...
- 《图解机器学习-杉山将著》读书笔记---CH3
CH3 最小二乘学习法 重点提炼 提出最小二乘学习法的缘故: 最小二乘学习法公式 对不同模型进行最小二乘法学习,得到最小二乘公式中的参数theta: 1.线性模型 代入3.1公式,对参数求偏导,偏 ...
- 学以致用,react学习前奏准备阶段
ReactJS:支持React开发,提供JSX代码提示,高亮显示,ReactJS官方介绍 1.cdm→ componentDidMount: fn() { ... } cdm 2.cdup→ ...