1.Spring概述
Spring通过配置文件来描述Bean和另一个Bean之间的依赖关系,利用Java的反射功能实例化Bean并建立起Bean的依赖关系。Spring在此基础上提供了,Bean实例缓存,生命周期管理,代理,事件机制,国际化,资源装载等功能。
Spring用来实现Bean工厂的核心接口BeanFactory和ApplicationContext。我们一般把BeanFactory成为Ioc容器,将ApplicationContext称为应用上下文,也可以称为Spring容器。
2.BeanFactory介绍
1)DefaultListableBeanFactory继承图
AliasRegistry:定义Bean别名的增删改查操作
BeanDefinitionRegistry:提供对BeanDefinition的增删改查操作
SingletonBeanRegistry:提供对单例Bean的注册注册和获取
BeanFactory:Spring容器的顶级接口,提供获取单个Bean或Bean属性的接口
HierarchicalBeanFactory:层次关系的接口,使BeanFactory可以继承
ListableBeanFactory:提供获取所有Bean的接口定义
ConfigurableBeanFactory:提供对Bean工厂配置接口
AutowireCapableBeanFactory:提供Bean自动装配的接口,创建Bean,Bean初始化配置,自动注入等操作
ConfigurableListableBeanFactory:提供分析修改Bean定义的接口,并预先实例化单例接口
2)主要实现类源码分析
之后再完善
SimpleAliasRegistry:
DefaultSingletonBeanRegistry:
FactoryBeanRegistrySupport:
AbstractBeanFactory:
AbstractAutowireCapableBeanFactory:
DefaultListableBeanFactory:
3.ApplicationContext介绍
ApplicationContext接口继承了ListableBeanFactory和HierarchicalBeanFactory也就是ApplicationContext拥有BeanFactory获取Bean和Bean的接口定义和层次关系的能力,同时使用了装饰者设计模式,在AbstractRefreshableApplicationContext中包含了DefaultListableBeanFactory的属性。也就是BeanFactory用来配置保存bean,ApplicationContext在此基础上拓展了加载上下文,国际化,事件发布等能力。
1)AnnotationConfigApplicationContext继承图
ApplicationContext:应用程序配置的中心接口
Lifecycle:生命周期接口,控制上下文启动和停止
ConfigurableApplicationContext:应用程序上下文配置的接口
EnvironmentCapable:公开上下文环境相关的接口
MessageSource:国际化解析消息的策略接口
ApplicationEventPublisher:事件发布相关的接口
ResourcePatternResolver:根据资源位置获取资源的接口,可以解析jar包中的资源文件
ResourceLoader:加载资源的策略接口
2)主要实现类源码分析
DefaultResourceLoader:
AbstractApplicationContext:
GenericApplicationContext:
AnnotationConfigApplicationContext:
4.总结
Ioc容器主要的接口是BeanFactory和ApplicationContext,BeanFactory提供Bean的操作,ApplicationContext继承了BeanFactory在此基础上提供了上下文配置的功能,我们可以配置元数据加载上下文,把获取到的Bean保存在Ioc中,ApplicationContext并额外提供了Bean实例缓存,生命周期管理,代理,事件机制,国际化,资源装载等功能。
BeanFactory的主要实现是DefaultListableBeanFactory
ApplicationContext根据xml加载上下文的实现是ClassPathXmlApplicationContext
ApplicationContext根据注解加载上下文的实现是AnnotationConfigApplicationContext
Springboot的加载上下文根据类型判断
如果是Servlet环境,实现是AnnotationConfigServletWebServerApplicationContext
如果是反应式环境,实现是AnnotationConfigReactiveWebServerApplicationContext
默认是AnnotationConfigApplicationContext
Springboot主要在AnnotationConfigServletWebServerApplicationContext中加入了嵌入式web容器,像tomcat,jetty,undertow。