上一篇文章介绍到了AnnotationConfigApplicationContext的类图,今天来分析下每个接口的功能及Spring构建该类图的一些思想及设计原则
- BeanFactory:Spring Bean容器的顶级接口,定义了获取Bean、判断是否单例、获取类型、获取别名等与Bean及其属性相关的方法。因此功能主要是获取Bean及其属性
- MessageSource:用于解析消息的策略接口,支持此类消息的参数化和国际化。从给定的消息源解析并获取消息
- ListableBeanFactory:BeanFactory接口的扩展将由Bean工厂实现,它可以枚举所有的bean实例,而不是根据客户端的请求逐个尝试按名称查找bean。预加载所有bean定义的BeanFactory实现(例如基于XML的工厂)可以实现这个接口。
- HierarchicalBeanFactory:继承BeanFactory,在BeanFactory定义的基础上增加了对parentFactory的支持
- ApplicationEventPublisher:封装事件发布功能的接口,只定义了一个重载的方法publishEvent,java8增加了对函数式接口的支持
- ResourceLoader:加载资源(类路径、文件系统等)的策略接口
- ResourcePatternResolver:继承ResourceLoader,用于将位置模式(例如,Ant样式的路径模式)解析为资源对象的策略接口。
- EnvironmentCapable:该接口意味着包含并暴露Environment的引用
- DefaultResourceLoader:继承ResourceLoader,加载资源的默认实现,并定义了一个显式表示相对路径的内部类ClassPathContextResource
- ApplicationContext:为应用程序提供配置的中央接口。当应用程序运行时,这是只读的,但是如果实现支持这样做,则可以重新加载。
- LifeCycle:定义控制生命周期开始或停止的通用接口。典型用例是控制异步处理。注意:这个接口并不意味着特定的自动启动语义。实现这个目的考虑实现SmartLifeCycle
- ConfigurableApplicationContext:服务发现接口,关于服务发现可以参考这篇博文
- AbstractApplicationContext:继承DefaultResourceLoader,并实现了ConfigurableApplicationContext接口,ApplicationContext的抽象实现
- GenericApplicationContext:通用的ApplicationContext,内部持有一个DefaultListableBeanFactory实例,并且不采用特定的Bean定义格式。为了允许ApplicationContext应用任一个bean定义读取器,实现了BeanDefinitionRegistry
- AliasRegistry:定义对alias的简单增删改等操作
- BeanDefinitionRegistry:定义对BeanDefinition的增删改等操作
- AnnotationConfigRegistry:注解配置应用上下文的通用接口,定义了registry(注册)、scan(扫描)的方法
- AnnotationConfigApplicationContext:集合上面各种功能的独立的应用程序上下文
通过上面大篇幅的介绍,终于把整个类图了了解完了。我们可以看到整个体系,Spring设计的如此精良,每个接口都职责分明,也使用到了一些设计模式,如:策略模式
好了,今天先写到这,明天继续深入Spring是如何读取注解配置的