spring-core
spring最核心的組件是BeanFactory,看了源碼才發現,BeanFactory并非定義在spring-core中,那spring-core都有啥東東?
spring-core主要提供以下服務,為BeanFactory的定義提供基礎服務。
1, ConversionService
ConversionService.png
提供可配置的類型轉換服務
Converters.png
依賴內部的注冊表,
DefaultConversionService.png
默認支持的類型轉換
查找匹配的Converter
find-1.png
find-2.png
2, Environment
PropertySource:任何能提供key-value查找能力的數據源
MutablePropertySources:PropertySource集合,可動態增刪
profile:bean定義的邏輯分組,一個profile表示一組bean,只有active的profile對應的bean才會注冊到bean容器里。
Environment:繼承PropertyResolver,依賴內部的MutablePropertySources提供key查找服務,存儲當前active的profile。Environment表示用profile標識的一組key-value,作為其他關聯到profile的組件(bean定義)的Context。
StandardEnvironment.png
StandardEnvironment默認支持系統屬性和系統變量
profile.png
如果profile沒有顯示指定,默認從當前Environment的key值spring.profiles.active獲取,逗號分割。
StandardServletEnvironment.png
StandardServletEnvironment屬性源中額外添加了ServletContext和ServletConfig中的key-value。
3, Resource
資源就是一個基于各種協議+特定路徑的InputStream
協議.png
FileUrlResource:基于文件路徑的資源
FileUrlResource-1.png
FileUrlResource-2.png
ClassPathResource:
ClassPathResource-1.png
ClassPathResource-2.png
4, 序列化和反序列化
默認基于jdk的序列化.png
默認基于jdk的反序列化.png
5, 訪問類型元數據:可以不加載類,直接解析字節碼,spring boot應用類型推斷的基礎。
類元數據.png
類和方法及其注解元數據.png
基于反射.png
基于反射實現的標準元數據
基于asm.png
基于asm直接解析字節碼,不需要加載class,這就是打開spring boot源碼各種類未定義但是程序可以運行的原因。類在字節碼執行過程中遇到了才會加載,使用類的方法首先要有對象,構造對象的任務都委托給了spring的BeanFactory,在spring boot中BeanFactory首先會檢查注解中的條件是否滿足,指定的類是否可以使用classloader加載,不滿足條件的不加載,就算字節碼無法編譯通過,只要不加載就不會影響程序運行。
總結
以上是生活随笔為你收集整理的spring-core的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 源码分析 spring-c
- 下一篇: 最高响应比优先算法(HRRF)及例题详解