关于java:源码解析Spring源码解析笔记五接口设计总览

30次阅读

共计 3558 个字符,预计需要花费 9 分钟才能阅读完成。

本文由 colodoo(纸伞)整顿
QQ 425343603
Java 学习交换群(717726984)

Spring 解析笔记 启动过程局部曾经实现,对启动过程源码有趣味的敌人能够作为参考文章。

  • 源码解析:Spring 源码解析笔记(二)启动过程(上)
  • 源码解析:Spring 源码解析笔记(三)启动过程(中)
  • 源码解析:Spring 源码解析笔记(四)启动过程(下)

启动过程篇幅曾经浏览完结,后续如果有脱漏的和谬误的中央都会进行修改,接下来咱们就要深刻的学习一下 Spring 的设计。

咱们先从启动过程章节中常常用到的比拟外围的一个类 AbstractApplicationContext 作为终点,先简略画出它相应的类图。

咱们还是从源码动手,平时大家可能不太违心间接去看简短的正文,Spring 的源码正文还是很标准的,这样能更间接了解设计的思路。

AbstractApplicationContext(形象应用程序上下文)

org.springframework.context.support.AbstractApplicationContext

  • 简略的实现最常见的上下文性能。
  • 模板办法设计模式(设计模式),须要子类去实现形象办法。
  • 检测其内存 bean 工厂中定义的非凡 bean,并主动注册

    • BeanFactoryPostProcessors(Bean 工厂后置处理器)
    • BeanPostProcessors(Bean 后置处理器)
    • ApplicationListeners(应用程序监听器)
  • MessageSource(音讯源)
  • ApplicationEventMulticaster(多播器)

    • 默认多播器:SimpleApplicationEventMulticaster
  • 扩大 DefaultResourceLoader 实现资源加载

    • 非 URL 资源门路被视为类门路资源
    • 可在子类重写 getResourceByPath 办法进行革新

接下来解析 AbstractApplicationContext 的间接依赖类和接口。

  • ConfigurableApplicationContext(可配置的应用程序上下文)
  • DefaultResourceLoader(默认资源加载器)

ConfigurableApplicationContext(可配置的应用程序上下文)

org.springframework.context.ConfigurableApplicationContext

接下来解析 ConfigurableApplicationContext 这个接口,它蕴含:

  • 应用程序上下文(ApplicationContext)
  • Closeable(可敞开)
  • Lifecycle(生命周期)

ApplicationContext(应用程序上下文)

org.springframework.context.ApplicationContext

为应用程序提供配置的地方接口。这在利用程序运行时是只读的,但如果实现反对它可能会从新加载。

  • 提供拜访 bean 的工厂办法(继承自 ListableBeanFactory 接口)
  • 通用形式加载文件资源的能力(继承自 ResourceLoader 接口)
  • 可能将工夫公布到注册的侦听器(继承自 ApplicationEventPublisher 接口)
  • 解析音讯的能力,反对国际化(继承自 MessageSource 接口)
  • 从父上下文继承。后辈上下文中的定义将始终优先

    • 父上下文被整个 Web 应用程序应用
    • 每个 servlet 都有本人的子上下文,子上下文独立于任何其余 servlet 的子上下文
  • BeanFactory 生命周期
  • 实现检测和调用接口

    • ApplicationContextAware(应用程序上下文)
    • ResourceLoaderAware(资源加载)
    • ApplicationEventPublisherAware(应用程序事件公布)
    • MessageSourceAwar(音讯源)

BeanFactory(Bean 工厂)

org.springframework.beans.factory.BeanFactory

  • 拜访 Spring Bean 容器的根接口。
  • Bean 容器的根本客户端视图,ListableBeanFactory 和 ConfigurableBeanFactory 可用于特定目标。
  • 该接口由蕴含多个 bean 定义的对象实现,每个定义由一个字符串名称惟一标识。

    • 依据 bean 定义,工厂将返回蕴含对象的独立实例(原型设计模式),或单个共享实例(单例设计模式的高级代替计划,其中实例是范畴内的单例工厂)。
    • 从 Spring 2.0 开始,依据具体的应用程序上下文(例如 Web 环境中的“申请”和“会话”范畴),能够应用更多范畴。
  • 通常 BeanFactory 将加载存储在配置源(例如 XML 文档)中的 bean 定义,并应用 org.springframework.beans 包来配置 bean。
  • 初始化办法及其规范程序:

    • BeanNameAware 的 setBeanName
    • BeanClassLoaderAware 的 setBeanFactory
    • EnviromenetAware 的 setEnvronment
    • EmbeddedValueResolverAware 的 setEmbeddedValueResolver
    • ResourceLoaderAware 的 setResourceLoader(仅在应用程序上下文中运行时实用)
    • ApplicationEventPublisherAware 的 setApplicationEventPublisher(仅在应用程序上下文中运行时实用)
    • MessageSourceAware 的 setMessageSource(仅在应用程序上下文中运行时实用)
    • ApplicationContextAware 的 setApplicationContext(仅在应用程序上下文中运行时实用)
    • ServletContextAware 的 setServletContext(仅在 web 利用上下文中运行时实用)
    • BeanPostProcessors 的 postProcessBeforeInitialization 办法
    • InitializingBean 的 afterPropertiesSet
  • 自定义初始化办法定义

    • BeanPostProcessors 的 postProcessAfterInitialization 办法
  • 在敞开 bean 工厂时,以下生命周期办法实用

    • DestructionAwareBeanPostProcessors 的 postProcessBeforeDestruction 办法
    • DisposableBean 的 destroy
    • 自定义销毁办法定义

Closeable(可敞开)

java.io.Closeable

Closeable 是能够敞开的数据源或指标。调用 close 办法来开释对象持有的资源(例如关上的文件)。

Lifecycle(生命周期)

org.springframework.context.Lifecycle

  • 定义启动 / 进行生命周期管制办法的通用接口
  • 典型的用例是管制异步解决
  • 能够由组件(Bean)和容器(ApplicationContext)实现。
  • 容器将开始 / 完结 新皓流传到利用的每个容器内的所有组件。

DefaultResourceLoader(默认资源加载器)

org.springframework.core.io.DefaultResourceLoader

  • ResourceLoader 接口的默认实现
  • 由 ResourceEditor,并作为 org.springframework.context.support.AbstractApplicationContext 基类。
  • 也能够独自应用
  • 如果地位值是 URL,则返回 UrlResource 如果是非 URL 门路或“classpath:”伪 URL,则返回 ClassPathResource

ResourceLoader(资源加载器)

org.springframework.core.io.ResourceLoader

  • 用于加载资源(例如类门路或文件系统资源)的策略接口。
  • 须要 ApplicationContext 来提供此性能,以及扩大的 ResourcePatternResolver 反对。
  • DefaultResourceLoader 是一个独立的实现,能够在 ApplicationContext 之外应用,也被 ResourceEditor。
  • 在 ApplicationContext 中运行时,能够应用特定上下文的资源加载策略从字符串填充类型为 Resource 和 Resource 数组的 Bean 属性。

总结

因为是总览,所以不会对源码中提及的类进行深刻的浏览。

本章的目标就是找出一些,咱们必要要把握的一些类以及接口,为前面咱们的逐行解析进行规整。

正文完
 0