最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的NamespaceHandler與BeanDefinitionParser詳解

 更新時間:2023年12月01日 10:25:20   作者:thewindkee  
這篇文章主要介紹了Spring中的NamespaceHandler與BeanDefinitionParser詳解,由Spring啟動過程之obtainFreshBeanFactory() ,可以看到NamespaceHandler、BeanDefinitionParser為解析配置文件中的Element起重要作用,那么它本身是如何被加載的呢,需要的朋友可以參考下

1.前文

由Spring啟動過程之-obtainFreshBeanFactory()

可以看到NamespaceHandler、BeanDefinitionParser為解析配置文件中的Element起重要作用。

那么它本身是如何被加載的呢?

2.NamespaceHandler之ContextNamespaceHandler

常見的NamespaceHandler實例:ContextNamespaceHandler

很明顯能看出有常用的 context:annotation-config/、<context:component-scan base-package=“xx”/>、context:property-placeholder/對應(yīng)的解析類。

在這里插入圖片描述

3.BeanDefinitionParser的作用

解析相關(guān)節(jié)點,并注冊BeanDefinition。

3.1 PropertyPlaceholderBeanDefinitionParser

大致流程為解析<context:property-placeholder location="classpath:module.properties" />節(jié)點,包裝PropertySourcesPlaceholderConfigurer為BeanDefinition,將里面的屬性裝配到BeanDefinition中,并注冊到BeanDefinitionMap。

PropertyPlaceholderBeanDefinitionParser#parse:
	AbstractBeanDefinitionParser->
		parseInternal->
			BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition();//創(chuàng)建BeanDefinition
			...
			builder.getRawBeanDefinition().setBeanClass(PropertySourcesPlaceholderConfigurer.class);
			...
			doParse(element, parserContext, builder)->
				super.doParse(element, parserContext, builder);//解析公共屬性:location,fileEncoding等
				....//做特殊屬性的解析
			return builder.getBeanDefinition();
		//統(tǒng)一注冊
		registerBeanDefinition(holder, parserContext.getRegistry());

3.2 ComponentScanBeanDefinitionParser

解析節(jié)點<context:component-scan base-package="com.gkwind"/>本身。并根據(jù)其配置,做特殊的class掃描,將符合配置的class,如被@Component標(biāo)記過的類 包裝成BeanDefinition,注入到BeanDefinitionMap中。 注意這里做的工作是根據(jù)配置,掃描加載了配置對應(yīng)的多個類

ComponentScanBeanDefinitionParser#parse流程

在這里插入圖片描述

NamespaceHandler 加載過程

跟蹤源碼, 可以發(fā)現(xiàn)解析非自定義命名空間parseCustomElement時會調(diào)用DefaultNamespaceHandlerResolver#resolve,然后resolve得到的所有NamespaceHandler。之后得到命名空間對應(yīng)的NamespaceHandler 再NamespaceHandler#init初始化相關(guān)的parser。

getHandlerMappings以SPI的方式得到所有spring.handlers

在這里插入圖片描述

NamespaceHandler 加載流程

在這里插入圖片描述

作用:可實現(xiàn)自定義標(biāo)簽

知道了NamespaceHandler與BeanDefinitionParser作用后, 我們可以自定義schema,然后在spring的xml中自定義命名空間thewindkee標(biāo)簽<thewindkeetag>,再實現(xiàn)thewindkee對應(yīng)的NamespaceHandler與<thewindkeetag>的BeanDefinitionParser,最后將NamespaceHandler配置到META-INF/spring.handlers。

大致Java代碼:

class TheWindKeeNamespaceHandler  extends NamespaceHandlerSupport {
	public void init(){
     registerBeanDefinitionParser("thewindkeetag", new TheWindKeeTagBeanDefinitionParser());
	}
}
class TheWindKeeTagBeanDefinitionParser extends AbstractBeanDefinitionParser{
   public final BeanDefinition parse(Element element, ParserContext parserContext) {
		//解析element
		....
		//注冊BeanDefinition
		registerBeanDefinition(holder, parserContext.getRegistry());
	}
}

到此這篇關(guān)于Spring中的NamespaceHandler與BeanDefinitionParser詳解的文章就介紹到這了,更多相關(guān)NamespaceHandler與BeanDefinitionParser內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring框架生成圖片驗證碼實例

    Spring框架生成圖片驗證碼實例

    驗證碼在很多地方都會遇到,實現(xiàn)的方法和形式也有很多,主要的目的就是為了安全,防止一些惡意的攻擊等。今天在之前搭建好的一個spring框架上寫了一個驗證碼的生成demo,我會貼出細(xì)節(jié)代碼,但是spring的配置就不在介紹了,有需要的可以參考借鑒。
    2016-08-08
  • IDEA如何在當(dāng)前類中查找方法快捷鍵

    IDEA如何在當(dāng)前類中查找方法快捷鍵

    這篇文章主要介紹了IDEA如何在當(dāng)前類中查找方法快捷鍵問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java的抽象方法和抽象類實例詳解

    Java的抽象方法和抽象類實例詳解

    這篇文章主要介紹了Java的抽象方法和抽象類,結(jié)合實例形式詳細(xì)分析了java抽象方法和抽象類的相關(guān)原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-09-09
  • 詳解HttpClient用法

    詳解HttpClient用法

    HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議,這篇文章主要介紹了詳解HttpClient用法,需要的朋友可以參考下
    2021-01-01
  • Mybatis環(huán)境配置及測試詳解

    Mybatis環(huán)境配置及測試詳解

    這篇文章主要介紹了Mybatis環(huán)境配置及測試詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot中集成IP2Region實現(xiàn)高效IP地址地理位置查詢

    SpringBoot中集成IP2Region實現(xiàn)高效IP地址地理位置查詢

    IP2Region是一個高效的IP地址地理位置查詢庫,能夠快速根據(jù)IP地址獲取其地理位置信息,它支持IPv4和IPv6地址的查詢,并提供多種緩存方式來優(yōu)化查詢性能,在這篇博客中,我們將介紹如何將IP2Region集成到SpringBoot項目中,實現(xiàn)IP地址的地理位置查詢服務(wù)
    2025-12-12
  • Java仿淘寶首頁分類列表功能的示例代碼

    Java仿淘寶首頁分類列表功能的示例代碼

    這篇文章主要介紹了仿淘寶分類管理功能的示例代碼,具有很好的參考價值,希望對大家有所幫助,也給大家做個參考
    2018-05-05
  • java中以DES的方式實現(xiàn)對稱加密并提供密鑰的實例

    java中以DES的方式實現(xiàn)對稱加密并提供密鑰的實例

    這篇文章主要介紹了java中以DES的方式實現(xiàn)對稱加密并提供密鑰的實例的相關(guān)資料,這里提供實例幫助大家學(xué)習(xí)理解這部分知識,需要的朋友可以參考下
    2017-08-08
  • Java中ClassNotFoundException的類加載問題排查與修復(fù)方法

    Java中ClassNotFoundException的類加載問題排查與修復(fù)方法

    在Java開發(fā)中,java.lang.ClassNotFoundException是常見的運行時異常,通常表示JVM在嘗試加載某個類時未能找到其定義,本文結(jié)合實戰(zhàn)經(jīng)驗,系統(tǒng)性分析ClassNotFoundException的排查與修復(fù)方法,并提供豐富的代碼示例和表格分析,需要的朋友可以參考下
    2025-06-06
  • 詳解Java中clone的寫法

    詳解Java中clone的寫法

    這篇文章主要介紹了Java中clone的寫法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07

最新評論

宝清县| 泰宁县| 洱源县| 淳化县| 二连浩特市| 犍为县| 横峰县| 通化县| 百色市| 资兴市| 福州市| 新竹县| 桃源县| 周口市| 同心县| 惠东县| 吉林市| 常德市| 江达县| 襄樊市| 侯马市| 武义县| 临桂县| 宣化县| 柘城县| 萨迦县| 阿鲁科尔沁旗| 汉寿县| 宁安市| 沾化县| 镇坪县| 文山县| 左权县| 张家川| 广水市| 资源县| 文安县| 黄浦区| 黔西县| 全椒县| 宾川县|