日韩性视频-久久久蜜桃-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标签 解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 久久久久一 | 日韩欧美国产亚洲 | 草草影院在线观看视频 | 西方av在线 | 日韩一区二区影院 | 亚洲大胆| 精品国产乱码久久久久久1区2区 | 国产女厕一区二区三区在线视 | 久久金品| 大桥未久在线视频 | 国产视频www | 欧美激情黑人 | 欧美激情一区 | 欧美黑人性猛交xxxx | 成人小视频免费在线观看 | 一级α片免费看刺激高潮视频 | 丰满岳跪趴高撅肥臀尤物在线观看 | 久久婷婷综合色丁香五月 | 在线中文字幕播放 | 在线无 | 香蕉亚洲 | 在线免费观看麻豆 | 日韩阿v | 97爱视频 | 成人a在线| 色网站入口 | 剧情av在线 | jizz欧美性11 | 日韩黄色片子 | 99re6在线| 亚洲自拍偷拍区 | 欧美91精品久久久久国产性生爱 | 在线欧美| 激情五月色综合国产精品 | av男人的天堂网 | 黄色网址在线播放 | 午夜青青草 | 久久中文免费视频 | 青青草在线免费 | 久久久91精品国产一区二区三区 | 成年人免费黄色片 | 伊人网在线视频观看 | 国产伦精品一区二区三区视频黑人 | 中文成人无字幕乱码精品区 | 日本熟妇一区二区三区 | 日产精品久久久久久久蜜臀 | 亚洲欧美bt | 国产在线一二三 | 蜜臀视频在线观看 | 免费一区二区视频 | 午夜免费视频观看 | 香蕉91视频 | 四虎影视永久 | 丁香五色月 | а 天堂 在线 | 亚洲伊人久久综合 | 奇米影视盒 | 成人在线观看一区二区三区 | 欧美福利视频在线 | 少妇看片 | 91成人免费在线 | 欧美一区二区三区国产 | 自拍21区| 日韩美女中文字幕 | 麻豆精品国产精华精华液好用吗 | 丝袜+亚洲+另类+欧美+变态 | 特级西西人体444www高清 | 国产精品91在线观看 | 亚洲另类在线观看 | 97超碰人人草 | 色婷婷久久久亚洲一区二区三区 | 一级色网站 | 亚洲伊人久久久 | 亚洲熟女少妇一区二区 | 中文字幕成人在线视频 | 国产99免费 | 一级黄色片在线免费观看 | 爱情岛论坛亚洲品质自拍视频 | 亚洲图片综合网 | 在线免费观看福利 | 男生操男生网站 | 国产精品98 | 色综合久久精品亚洲国产 | 久草视频中文在线 | 日韩区在线 | 男人和女人做爽爽视频 | www国产| 国产在线毛片 | 日本视频免费看 | 日韩精品一区二 | 亚洲熟妇一区二区三区 | 久久嫩草| 日韩欧美三级 | 国产四区 | 欧美三级小视频 | 黄色网免费看 | 国产人人干| 亚洲啪啪网 | 亚洲视频免费 |