Spring已经是成为Java EE的 '默认的规范' , 所以想凭自己对Spring的理解,来记录和分享Spring的功能特性和组件工具使用
从下面几个方面来介绍和探讨Spring
talk is cheap , show me the code
1. Spring IOC继承体系概述
1.1简介各种BeanFactory的接口和核心功能
1.1 BeanFactory
1.2是SpringIOC容器的根容器,仅仅提供Spring Bean的依赖查找功能。相关功能如图1.2
1.2 HierarchicalBeanFactory
1.3提供层次性的依赖查找功能,相关类图如下
-
containsLocalBean(String beanName)
: 是用来判断当前层次上下文中是否包含该beanName
对应的Spring Bean -
getParentBeanFactory()
: 用来获取父容器如果有的话!
源码使用场景和位置
// AbstractBeanFactory#doGetBean 278行
// 1. 获取父容器
BeanFactory parentBeanFactory = getParentBeanFactory();
// 2. 若父容器存在且当前容器不存在该beanName
if (parentBeanFactory != null && !containsBeanDefinition(beanName)) {
// Not found -> check parent.
String nameToLookup = originalBeanName(name);
//....省略一些逻辑
//3. 去父容器中获取
}else {
return (T) parentBeanFactory.getBean(nameToLookup);
}
1.3 ConfigurationBeanFactory
//通过集成SingletonBeanRegistry 也具有了注册和获取单实例SingletonBean的功能
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry{}
提供了诸多容器相关配置,比如是否允许循环依赖,设置classLoader , 添加BeanPostProcessor (Bean的后置处理器,后面有文章详细介绍) , 类型转化相关(TypeConverter,RegisterEditor..) ,是容器的基本配置入口,也提供了注册相关Scope和单实例bean的方法
1.4 ListableBeanFactory
1.3提供了符合类型的bean查找,以及根据注解/类型查询匹配的所有Bean ,以及提供延迟查找ObjectProvider等。
1.5 AutowireCapableBeanFactory
提供了依赖注入的相关的核心接口功能,以及创建/销毁/查找解析Bean,以及Bean相关初始化阶段的回调生命周期接口
[站外图片上传中...(image-7f87ff-1607514876786)]
1.6 ConfigurableListableBeanFactory
//集成了多个功能BeanFactory接口,提供了配置,单一和集合复杂类型查找,以及依赖注入功能
public interface ConfigurableListableBeanFactory
extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory {}
image-20201209163106810且该容器工厂接口对象,添加了一些辅助sh生命周期接口,比如核心的
registerResolvableDependency
注册 '游离'的依赖注入Bean,以及所有Bean都注册完毕之后的核心回调方法preInstantiateSingletons
,还有一些忽略注入类型的接口
1.7 最核心的BeanFactory工厂类 : DefaultListableBeanFactory
//1. 通过实现ConfigurableListableBeanFactory获取单一和复杂集合类型的查找能力,继承抽象注入工厂(依赖注入核心实现)
//2. 实现BeanDefinitionRegister , 提供获取和注册BeanDefinition的功能
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {}
1.8 用的最多的应用上下文 : ApplicationContext
相比BeanFactory,我们业务开发过程中遇到的最多还是ApplicationContext,它在BeanFactory基础上提供了一些列企业开发的功能,如Resource资源管理,外部化配置,事件,国际化等。并提供了丰富的容器(BeanFactoryPostProcessor)和Bean的生命周期回调(BeanPostProcessor)等等。
//1. 复合了EnvironmentCapable 外部化配置和Profile环境切换功能
//2. 组合了BeanFactory获取BeanFactory工厂的所有能力
//3. MessageSource : 国际化文案功能 , ApplicationEventPublisher : 事件功能 , ResourcePatternResolver:资源解析
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory,
HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {}
1.9 应用上下文核心生命周期实现 : AbstractApplicationContext
//1. 抽象应用上下文,为Spring中最为常用的上下文实现,封装了SpringIOC的核心生命周期和刷新过程
//2. 符合了ResourceLoader资源加载功能,以及ConfigurableApplicationContext的LifeCycle相关生命周期功能
public abstract class AbstractApplicationContext extends DefaultResourceLoader
implements ConfigurableApplicationContext {}
1.10 现阶段使用最多的注解驱动上下文 : AnnotationConfigApplicationContext
//1. 继承通用上下文实现
//2. 实现了注解配置注册类,提供注解方式注册Bean和Bean Scan扫描方式
public class AnnotationConfigApplicationContext extends GenericApplicationContext implements AnnotationConfigRegistry{}
网友评论