org.springframework.beans 和 org.springframework.context 包是 Spring Framework 的 IoC 容器的基础。
这里需掌握两个体系结构,BeanFactory 和 ApplicationContext。
BeanFactory 主要接口,可分为三级:
- BeanFactory 是顶层容器,定义了所有 IoC 容器 必须遵从的原则,定义 获取 bean 及 bean 的provider、类型、别名等信息 ;
- 有3个子接口继承了它,进行不同功能上的增强,为二级接口;
- HierarchicalBeanFactory:父子层次容器,增加了对 parentFactory 的 支持
- AutowireCapableBeanFactory:自动装配bean容器,提供创建 bean、自动注入、初始化以及应用 bean 的后处理器,为第三方框架赋能
- ListableBeanFactory:可枚举bean容器,根据各种条件获取 bean 的配置清单
- 三级接口是对二级接口的综合
- ConfigurableBeanFactory:复杂配置的容器,提供配置 Factory 的各种方法
- ConfigurableListableBeanFactory:完整功能的容器
BeanFactory 主要实现类:
- AbstractBeanFactory:抽象工厂类,主要提供了这样的三个功能: 别名管理,单例创建与注册,工厂方法FactoryBean支持;
- AbstractAutowireCapableBeanFactory:抽象工厂类,主要功能是bean的创建;
- DefaultListableBeanFactory:具备全部功能的BeanFactory的默认实现,AbstractApplicationContext#refresh()方法中创建的容器类型。
BeanFactory 相关接口和实现类:
- SingletonBeanRegistry:定义对单例的注册及获取
- AliasRegistrγ:定义对 alias 的简单增删改等操作
- BeanDefinitionRegistry:定义对 BeanDefinition 的各种增删改操作
- SimpleAliasRegistry:主要使用 map 作为 alias 的缓存,并对接口 AliasRegistry 进行 实现
- DefauItSingletonBeanRegistry:对接口 SingletonBeanRegistry各函数的实现
- FactoryBeanRegistrySupport:在 DefaultSingletonBeanRegistry 基础上增加了对 FactoryBean 的特殊处理功能
在上述内容中,涉及的知识点主要有:bean的加载过程(生命周期),自动装配,bean的循环依赖(三级缓存),BeanFactory和FactoryBean的区别。
ApplicationContext 主要接口,可分为二级:
- 一级接口:ApplicationContext
- EnvironmentCapable:可配置Environment
- ListableBeanFactory:前面有介绍:可将Bean逐一列出的工厂
- HierarchicalBeanFactory:前面有介绍:分层的工厂
- MessageSource:可管理message实现国际化等功能
- ApplicationEventPublisher:可publish事件,调用Listener
- ResourcePatternResolver:加载pattern指定的资源
- 二级接口:WebApplicationContext、ConfigurableApplicationContext
- WebApplicationContext:web环境的Context
- ConfigurableApplicationContext:可配置的应用上下文
二级接口抽象实现类:
- AbstractApplicationContext:实现了该接口的大部分功能;
- AbstractRefreshableApplicationContext和GenericApplicationContext
- GenericApplicationContext 通用的应用上下文(请注意:它已经不是抽象类,可以直接使用了)
- AbstractRefreshableApplicationContext:实现了父类的方法refreshBeanFactory(),执行BeanFactory的“刷新”。
- AbstractRefreshableConfigApplicationContext:这里它有两个比较典型的实现类:
- FileSystemXmlApplicationContext:taking the context definition files from the file system or from URLs
- ClassPathXmlApplicationContext:taking the context definition files from the class path
- 三级接口:ConfigurableWebApplicationContext
并没有定义太多的操作,主要是Servlet上下文及配置文件。
抽象实现类:AbstractRefreshableWebApplicationContext
实现类:- XmlWebApplicationContext
- GroovyWebApplicationContext
- AnnotationConfigWebApplicationContext