spring最核心的組件是BeanFactory羡洛,看了源碼才發(fā)現(xiàn)趁曼,BeanFactory并非定義在spring-core中沦辙,那spring-core都有啥東東司浪?
spring-core主要提供以下服務(wù)消痛,為BeanFactory的定義提供基礎(chǔ)服務(wù)且叁。
1, ConversionService
提供可配置的類型轉(zhuǎn)換服務(wù)
依賴內(nèi)部的注冊表,
默認(rèn)支持的類型轉(zhuǎn)換
查找匹配的Converter
2秩伞, Environment
PropertySource:任何能提供key-value查找能力的數(shù)據(jù)源
MutablePropertySources:PropertySource集合逞带,可動(dòng)態(tài)增刪
profile:bean定義的邏輯分組,一個(gè)profile表示一組bean纱新,只有active的profile對應(yīng)的bean才會(huì)注冊到bean容器里展氓。
Environment:繼承PropertyResolver,依賴內(nèi)部的MutablePropertySources提供key查找服務(wù)脸爱,存儲(chǔ)當(dāng)前active的profile遇汞。Environment表示用profile標(biāo)識的一組key-value,作為其他關(guān)聯(lián)到profile的組件(bean定義)的Context簿废。
StandardEnvironment默認(rèn)支持系統(tǒng)屬性和系統(tǒng)變量
如果profile沒有顯示指定叨襟,默認(rèn)從當(dāng)前Environment的key值spring.profiles.active獲取,逗號分割十绑。
StandardServletEnvironment屬性源中額外添加了ServletContext和ServletConfig中的key-value呼奢。
3, Resource
資源就是一個(gè)基于各種協(xié)議+特定路徑的InputStream
FileUrlResource:基于文件路徑的資源
ClassPathResource:
4单料, 序列化和反序列化
5埋凯, 訪問類型元數(shù)據(jù):可以不加載類,直接解析字節(jié)碼扫尖,spring boot應(yīng)用類型推斷的基礎(chǔ)白对。
基于反射實(shí)現(xiàn)的標(biāo)準(zhǔn)元數(shù)據(jù)
基于asm直接解析字節(jié)碼,不需要加載class换怖,這就是打開spring boot源碼各種類未定義但是程序可以運(yùn)行的原因甩恼。類在字節(jié)碼執(zhí)行過程中遇到了才會(huì)加載,使用類的方法首先要有對象,構(gòu)造對象的任務(wù)都委托給了spring的BeanFactory媳拴,在spring boot中BeanFactory首先會(huì)檢查注解中的條件是否滿足黄橘,指定的類是否可以使用classloader加載,不滿足條件的不加載屈溉,就算字節(jié)碼無法編譯通過塞关,只要不加載就不會(huì)影響程序運(yùn)行。