日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring 之 import标签、alias标签、beans标签 解析

發布時間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 之 import标签、alias标签、beans标签 解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼續接著Spring 加載、解析applicationContext.xml 流程解析 import 、 alias、beans 標簽。

DefaultBeanDefinitionDocumentReader.parseDefaultElement()

1. import 標簽解析

標簽示例

<import resource="user-appalicationContext.xml"/>

解析import 標簽

入口類、方法DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource();

protected void importBeanDefinitionResource(Element ele) {// 解析 resource 屬性String location = ele.getAttribute(RESOURCE_ATTRIBUTE);//如果為空,不做處理if (!StringUtils.hasText(location)) {getReaderContext().error("Resource location must not be empty", ele);return;}// 解析系統屬性。比如 "${user.dir}"location = getReaderContext().getEnvironment().resolveRequiredPlaceholders(location);Set<Resource> actualResources = new LinkedHashSet<>(4);boolean absoluteLocation = false;try {// 判斷 location 是絕對路徑還是相對路徑absoluteLocation = ResourcePatternUtils.isUrl(location) || ResourceUtils.toURI(location).isAbsolute();}catch (URISyntaxException ex) {// cannot convert to an URI, considering the location relative// unless it is the well-known Spring prefix "classpath*:"}// 絕對路徑if (absoluteLocation) {try {//加載xml配置文件,并解析資源int importCount = getReaderContext().getReader().loadBeanDefinitions(location, actualResources);if (logger.isDebugEnabled()) {logger.debug("Imported " + importCount + " bean definitions from URL location [" + location + "]");}}catch (BeanDefinitionStoreException ex) {getReaderContext().error("Failed to import bean definitions from URL location [" + location + "]", ele, ex);}}else {// No URL -> considering resource location as relative to the current file.try {int importCount;//獲取絕對路徑,并解析文件Resource relativeResource = getReaderContext().getResource().createRelative(location);if (relativeResource.exists()) {//加載xml文件,并解析importCount = getReaderContext().getReader().loadBeanDefinitions(relativeResource);actualResources.add(relativeResource);}else {// 獲取URL 路徑,并解析文件String baseLocation = getReaderContext().getResource().getURL().toString();importCount = getReaderContext().getReader().loadBeanDefinitions(StringUtils.applyRelativePath(baseLocation, location), actualResources);}if (logger.isDebugEnabled()) {logger.debug("Imported " + importCount + " bean definitions from relative location [" + location + "]");}}catch (IOException ex) {getReaderContext().error("Failed to resolve current resource location", ele, ex);}catch (BeanDefinitionStoreException ex) {getReaderContext().error("Failed to import bean definitions from relative location [" + location + "]",ele, ex);}}Resource[] actResArray = actualResources.toArray(new Resource[actualResources.size()]);getReaderContext().fireImportProcessed(location, actResArray, extractSource(ele)); }
  • 獲取resource屬性
  • 解析路徑中的系統屬性,格式如“${user.dir}”
  • 判斷location是絕對路徑還是相對路徑
  • 如果是絕對路徑,則遞歸調用bean的解析過程。重新執行這個流程 Spring 加載、解析applicationContext.xml 流程
  • 如果相對路徑,則把相對路徑轉換成絕對路徑,在解析
  • 通過監聽器、解析完成
  • 2. alias 標簽解析

    alias 標簽示例

    <bean id="user" class="cn.com.infcn.test.User"></bean> <alias name="user" alias="myUser" />

    解析 alias 標簽

    DefaultBeanDefinitionDocumentReader.processAliasRegistration()

    protected void processAliasRegistration(Element ele) {//獲取 name屬性String name = ele.getAttribute(NAME_ATTRIBUTE);//獲取 alias 屬性String alias = ele.getAttribute(ALIAS_ATTRIBUTE);boolean valid = true;//驗證 name 是否為空if (!StringUtils.hasText(name)) {getReaderContext().error("Name must not be empty", ele);valid = false;}//驗證 alias 是否為空if (!StringUtils.hasText(alias)) {getReaderContext().error("Alias must not be empty", ele);valid = false;}if (valid) {try {//把 alias 注冊到 SimpleAliasRegistry.aliasMap 中getReaderContext().getRegistry().registerAlias(name, alias);}catch (Exception ex) {getReaderContext().error("Failed to register alias '" + alias +"' for bean with name '" + name + "'", ele, ex);}getReaderContext().fireAliasRegistered(name, alias, extractSource(ele));} }
  • 解析 alias 標簽,獲取 name 和 alias 屬性值。
  • 把 name 和 alias 注冊到 SimpleAliasRegistry.aliasMap 屬性中。
  • SimpleAliasRegistry 源碼

    public class SimpleAliasRegistry implements AliasRegistry {private final Map<String, String> aliasMap = new ConcurrentHashMap<>(16);@Overridepublic void registerAlias(String name, String alias) {Assert.hasText(name, "'name' must not be empty");Assert.hasText(alias, "'alias' must not be empty");if (alias.equals(name)) {this.aliasMap.remove(alias);}else {String registeredName = this.aliasMap.get(alias);if (registeredName != null) {if (registeredName.equals(name)) {// An existing alias - no need to re-registerreturn;}if (!allowAliasOverriding()) {throw new IllegalStateException("Cannot register alias '" + alias + "' for name '" +name + "': It is already registered for name '" + registeredName + "'.");}}checkForAliasCircle(name, alias);this.aliasMap.put(alias, name);}}protected boolean allowAliasOverriding() {return true;}......

    3. beans 標簽解析

    beans標簽示例

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><bean id="user" class="cn.com.infcn.test.User"></bean><beans>......</beans> </beans>

    beans 標簽解析 又調用了doRegisterBeanDefinitions() 方法,這個方法在Spring 加載、解析applicationContext.xml 流程中已經介紹過了。
    跟import 解析都類似。又相當于重新執行解析了一邊 bean 標簽一樣。

    本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
    點擊這里快速進入簡書

    GIT地址:http://git.oschina.net/brucekankan/
    點擊這里快速進入GIT

    總結

    以上是生活随笔為你收集整理的spring 之 import标签、alias标签、beans标签 解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 制服丝袜亚洲色图 | 99国产精品自拍 | 黄色福利在线观看 | 黄片毛片在线免费观看 | 黄色日韩视频 | 成人有色视频 | 成人动漫一区二区三区 | 91在线观看免费高清 | 天天干天天插 | 亚洲永久精品一区二区 | 日韩三级一区二区三区 | 亚洲福利精品视频 | 国产麻豆精品在线 | 性生交大片免费看狂欲 | 日韩精品电影 | 免费国产一区二区三区 | 久草免费福利视频 | 天堂国产在线 | 久久538| 粉嫩av在线 | 被黑人啪到哭的番号922在线 | 中国一级片在线观看 | 中文字幕 成人 | 国产精品久久免费视频 | 在线不卡av电影 | 中文字幕一区二区人妻电影 | 性生活一区 | 别揉我奶头啊嗯一区二区 | 亚色视频| 日本a区| 亚洲国产精品女人久久久 | 成人精品免费网站 | 麻豆专区 | 久久精品国产网红主播 | 国产成人小视频 | 操夜夜操 | 亚洲最大成人在线 | av资源中文在线 | 亚洲视频大全 | 狠狠爱婷婷 | 亚洲精品女人久久久 | 九九热视频在线观看 | www黄色片| 亚洲精品中字 | 久操久操 | 西野翔夫の目の前で犯在线 | 高清不卡一区二区 | 999精彩视频 | 国产精品揄拍一区二区 | 久草福利在线观看 | 二区在线播放 | 美女毛片 | 天堂在线精品 | 91豆花视频 | 国产精品成人一区二区三区电影毛片 | 国产一级片自拍 | 亚洲经典在线观看 | 欧美国产高潮xxxx1819 | 瑟瑟视频免费观看 | 视频免费在线观看 | 久久精品一区二区在线观看 | 久久影视网 | 国产污视频在线观看 | 久久免费在线观看视频 | 青青草十七色 | 99riav3国产精品视频 | 男女偷爱性视频刺激 | 久久国产精品久久 | 99热这里只有精品久久 | 亚洲性猛交xxxx乱大交 | 一个人看的毛片 | 午夜寻花 | 中文字幕精品亚洲 | 午夜操一操 | 欧洲视频在线观看 | 阿v免费视频 | 亚洲一区第一页 | 97人妻精品一区二区三区免 | 亚洲经典视频 | 中文字幕在线欧美 | 欧美三级欧美成人高清 | 性欧美free | 亚洲精品国产视频 | 一级在线免费观看 | 日韩视频中文字幕在线观看 | 在线免费看av | 色91在线 | 性调教学院高h学校 | 国产天堂资源 | 奇米影视四色在线 | 久草福利免费 | 国产青青在线 | 免费无遮挡网站 | 奇米影视奇米色 | 欧美美女一级片 | 大桥未久恸哭の女教师 | 日韩一区二区高清视频 | 免费在线观看黄色片 | 国产不卡在线播放 |