BeanFactory源码体系解析一

BeanFactory:用于管理Bean的顶级工厂接口,它负责生产和管理bean,职责包括实例化、定位、配置应用程序中的对象,以及建立这些对象间的依赖。
1、FACTORY_BEAN_PREFIX= "&" 对FactoryBean的转义定义,使用bean名字检索FactoryBean得到的是工厂生成的对象,得到工厂实例本身需要转义。
2、getBean(String name) 根据Bean名字或者bean实例,单例对象在容器启动时进行创建。
3、getBean(String name, @Nullable Class<T> requiredType) 根据bean名字和Class类型获取bean实例,增加了类型安全验证机制。
4、getBean(String name, Object... args) 通过bean的名称和参数来获取bean实例
5、boolean containsBean(String name) 通过beanname查看容器是否存在bean
6、boolean isSingleton(String name) 判断bean是否是单例
7、String[] getAliases(String name) 得到bean的别名,如果根据别名查找,那么其原名也会查找出来。
HierarchicalBeanFactory:这些bean有继承关系,每个bean有可能有父bean,支持父子上下文,分层可以使容器的每层都专注于特定的层次,比如 WebApplicationContext(专注于提供对web的支持) -> ApplicationContext(专注于提供容器的扩展功能) -> BeanFactory(专注基础功能)
1、BeanFactory getParentBeanFactory() 获取 parent bean factory
2、boolean containsLocalBean(String name) 判断当前BeanFactory实例中是否有指定名称的bean,只在当前bean factory中检索,不会在 parent bean factory 中检索
ListableBeanFactory:这些bean是可列表化,即Listable可以列举,在BeanFactory的基础上扩展了Beaan的清单,根据清单可以判断容器中是否存在指定的Bean,统计Bean的数量,获取满足要求的Bean的名称,获取满足要求的所有Bean
1、boolean containsBeanDefinition(String beanName) 是否包含指定名称的BeanDefinition
2、int getBeanDefinitionCount() 获取BeanDefinition数量
3、String[] getBeanDefinitionNames() 获取所有Bean的名称
4、getBeanProvider 多种参数(饥饿加载、懒加载)获取Bean对应的BeanProvier
5、getBeanNamesForType 多种入参获取所有的Bean名称
6、getBeansOfType 获取指定Type的所有Bean,返回Map key=name,value=Bean实例
7、String[] getBeanNamesForAnnotation 获取指定注解的所有Bean名称
8、findAnnotationOnBean(String beanName, Class<A> annotationType) 获取指定Bean名称对应的注解实例

SingletonBeanRegistry :单例的顶级接口,定义了单例的通用操作
1、registerSingleton(String beanName, Object singletonObject) 注册单例
2、Object getSingleton(String beanName) 获取单例
3、boolean containsSingleton(String beanName) 判断是否包括指定Bean名称的单例
4、String[] getSingletonNames() 获取所有已创建的单例名称
5、int getSingletonCount() 获取所有已创建的单例数量
6、Object getSingletonMutex() 获取单例注册的互斥锁
ConfigurableBeanFactory : 在HierarchicalBeanFactory、SingletonBeanRegistry2个接口的基础上定义了BeanFactory的通用配置(类加载器、类型转换、属性编辑器、BeanPostProcessor、作用域、Bean定义处理依赖关系、Bean如何销毁),继承SingletonBeanRegistry扩展单例功能
属性SCOPE_SINGLETON(单例)、SCOPE_PROTOTYPE(原型)
设置父工厂,和HierarchicalBeanFactory的getParentBeanFactory方法互补
void setParentBeanFactory(BeanFactory parentBeanFactory);
四个和类加载器有关的方法工厂类加载器、临时类加载器
void setBeanClassLoader(@Nullable ClassLoader beanClassLoader);
ClassLoader getBeanClassLoader();
void setTempClassLoader(@Nullable ClassLoader tempClassLoader);
ClassLoader getTempClassLoader();
两个设置是否缓存元数据的方法
void setCacheBeanMetadata(boolean cacheBeanMetadata);
boolean isCacheBeanMetadata();
11个处理Bean注册,加载等细节的方法,Bean表达式分解器
void setBeanExpressionResolver(@Nullable BeanExpressionResolver resolver);
BeanExpressionResolver getBeanExpressionResolver();
转换服务
void setConversionService(@Nullable ConversionService conversionService);
ConversionService getConversionService();
属性编辑器属性编辑注册
void addPropertyEditorRegistrar(PropertyEditorRegistrar registrar);
void registerCustomEditor(Class<?> requiredType, Class<? extends PropertyEditor> propertyEditorClass);
void copyRegisteredEditorsTo(PropertyEditorRegistry registry);
类型转换器
void setTypeConverter(TypeConverter typeConverter);
TypeConverter getTypeConverter();
嵌入式的字符串分解器
void addEmbeddedValueResolver(StringValueResolver valueResolver);
boolean hasEmbeddedValueResolver();
String resolveEmbeddedValue(String value);
Bean的后置处理器
void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);
int getBeanPostProcessorCount();
生命周期注册范围
void registerScope(String scopeName, Scope scope);
String[] getRegisteredScopeNames();
Scope getRegisteredScope(String scopeName);
容器启动状态
void setApplicationStartup(ApplicationStartup applicationStartup);
ApplicationStartup getApplicationStartup();
返回安全访问上下文的方法
AccessControlContext getAccessControlContext();
从其他工程复制相关的所有配置
void copyConfigurationFrom(ConfigurableBeanFactory otherFactory);
两个Bean别名的方法
void registerAlias(String beanName, String alias);
void resolveAliases(StringValueResolver valueResolver);
合并Bean定义
BeanDefinition getMergedBeanDefinition(String beanName) ;
判断是否为工厂Bean
boolean isFactoryBean(String name) ;
Bean创建时机
void setCurrentlyInCreation(String beanName, boolean inCreation);
boolean isCurrentlyInCreation(String beanName);
Bean依赖相关方法
void registerDependentBean(String beanName, String dependentBeanName);
String[] getDependentBeans(String beanName);
String[] getDependenciesForBean(String beanName);
三个销毁方法
void destroyBean(String beanName, Object beanInstance);
void destroyScopedBean(String beanName);
void destroySingletons();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值