代号十三
文章12
标签5
分类3
Spring-framework源码分析(八)getBean单例循环依赖解决思路

Spring-framework源码分析(八)getBean单例循环依赖解决思路

  • 循环依赖如何发生?
  • spring如何解决循环依赖
Spring-framework源码分析(七)bean的生命周期

Spring-framework源码分析(七)bean的生命周期

实例化
填充属性
初始化
销毁

Spring-framework源码分析(六)refresh方法

Spring-framework源码分析(六)refresh方法

refresh方法是Spring容器最核心的方法

  • 概括了Spring初始化bean的整个生命周期
  • 生命周期的回调
  • AOP
  • Spring解决循环依赖的三级缓存
Spring-framework源码分析(五)IOC容器初始化

Spring-framework源码分析(五)IOC容器初始化

Spring IOC 容器 在初始化时主要做以下三件事:

  • BeanDefinition 的Resource定位
  • BeanDefinition 的载入和解析
  • BeanDefinition 在容器中的注册
Spring-framework源码分析(四)BeanDefinition

Spring-framework源码分析(四)BeanDefinition

BeanDefinition 是 Spring-framework 的基石

Spring-framework源码分析(三)统一资源加载

Spring-framework源码分析(三)统一资源加载

关于统一资源和资源加载策略

官网对于 org.springframework.core.io.Resource 的一段说明: https://docs.spring.io/spring-framework/docs/5.2.7.RELEASE/spring-framework-reference/core.html#resources-introduction

Java’s standard java.net.URL class and standard handlers for various URL prefixes, unfortunately, are not quite adequate enough for all access to low-level resources. For example, there is no standardized URL implementation that may be used to access a resource that needs to be obtained from the classpath or relative to a ServletContext. While it is possible to register new handlers for specialized URL prefixes (similar to existing handlers for prefixes such as http:), this is generally quite complicated, and the URL interface still lacks some desirable functionality, such as a method to check for the existence of the resource being pointed to.

  Spring’s Resource interface is meant to be a more capable interface for abstracting access to low-level resources.

  在 Java 中,将不同来源的资源抽象成 java.net.URL ,即统一资源定位器(Uniform Resource Locator),然后通过注册不同的 handler ( URLStreamHandler )来处理不同来源的资源的读取逻辑,一般 handler 的类型使用不同前缀(协议, Protocol )来识别,如“file:”“http:” “jar:”等,然而 URL 没有默认定义相对 Classpath 或 ServletContext 等资源的 handler ,虽然可以注册自己的 URLStreamHandler 来解析特定的 URL 前缀(协议), 比如“classpath:”,然而这需要了解 Url 的实现机制,实现也比较复杂,而且 Url 也没有提供一些基本的方法,如检查当前资源是否存在、检查当前资源是否可读等方法。 因而 Spring 对其内部使用到的资源实现了自己的抽象结构 : Resource 接口封装底层资源,(《Spring源码深度解析 第二版》,略微修改)然后通过 ResourceLoader 接口来实现 Resource 的加载策略,也即是提供了统一的资源定义和资源加载策略的抽象。通过不同策略进行的所有资源加载,都可以返回统一的抽象给客户端,客户端对资源可以进行的操作,则由 Resource 接口进行界定,具体如何处理,则交由不同来源的资源实现类来实现。

  • Resource :提供统一的资源定义抽象,界定了对资源可以进行的处理操作。例如:文件资源( FileSystemResource ) 、 Classpath 资源( ClassPathResource )、 URL 资源( UrlResource )、 InputStream 资源( InputStreamResource ) 、Byte 数组( ByteArrayResource )等 。
  • ResourceLoader :提供统一的资源加载策略抽象,返回统一的 Resource 资源抽象给客户端。
Spring-framework源码分析(二)架构总览与说明

Spring-framework源码分析(二)架构总览与说明

Spring-Framework整体架构

Spring-framework源码分析(一)调试环境搭建

Spring-framework源码分析(一)调试环境搭建

本文主要内容: 搭建spring-framework 编译调试环境源码

Spring-framework源码分析(零)汇总

Spring-framework源码分析(零)汇总

源码仓库

https://github.com/Code-13/spring-framework

说明

  • 本系列博客的参考均来源自 Spring官方文档

  • 本系列的学习与理解思路均按照自己的方式进行

  • 本系列所用的参考均会列出;如有雷同,纯属借鉴

  • 如有错误或者纰漏,纯属能力/经验/知识面不足,望各位读者大佬不吝指正,共同进步

×