在日常使用spring的時候,如果我們使用基於xml的spring配置,那麼不可避免的需要配置許多節點,最常見的可能是標籤的配置,但除了這個之外,比如我們使用到aop的時候,可能需要配置如這樣的標籤節點,而在配置這個標籤之前,通常我們需要引入這個aop標籤所在的命名空間,如下面**中紅色加粗部分所示:
<?xml version="1.0" encoding="utf-8"?>
xmlns:xsi=""
xmlns:aop=""
xmlns:context=""
xsi:schemalocation=" /spring-beans.xsd
/spring-aop.xsd
/spring-context.xsd">
這個命名空間的引入,既是限定我們所編寫的aop開頭的標籤必須符合spring-aop.xsd的定義限定,如 aop下各子節點元素定義的先後順序等,在真正的容器啟動載入的過程中,這些標籤所定義的資訊是如何解析並載入的呢?
spring在載入bean的時候,對各個子節點的載入主要分成了兩類,一類是預設命名空間下元素節點的載入(即空間之下的元素節點,主要是bean、import、alias等這幾個最常用標籤),另一類則是個性化命名空間下元素節點的載入(所謂的個性化命名空間指的是除了
空間之外的諸如這類命名空間,當然也包括自定義命名空間);具體處理可參考
org.
springframework.
beans.
factory.
xml.
defaultbeandefinitiondocumentreader.parsebeandefinitions(
element root,
beandefinitionparserdelegate delegate)方法,如下:
/**
* parse the elements at the root level in the document:
* "import", "alias", "bean".
* @param root the dom root element of the document
*/
protected
void
parsebeandefinitions(element root, beandefinitionparserdelegate delegate)
else
}
}
}
else
}
對於預設命名空間下的節點解析這裡略過不講,對於非預設空間下的節點解析作如下深入討論:
這裡首先明確幾點:
spring對於非預設空間下標籤的解析處理都是有對應的***namespacehandler的,比如解析標籤,其有乙個對應的叫做aopnamespacehandler的handler存在,所有在aop命名空間之下的幾點的解析交給該handler處理;這一點從如下**可以窺得一斑:
public
beandefinition parsecustomelement(element ele, beandefinition containingbd)
//這裡具體的handler負責相應的節點解析
return
handler.parse(ele,
new
parsercontext(
this
.readercontext,
this
, containingbd));
}
所有的namespacehandler都必須繼承自
org.
springframework
.beans
.factory
.xml
.namespacehandlersupport並實現init()方法,這個init方法中一般會向該handler中註冊改命名空間下多個標籤所對應的paser處理類,如:
public
class
aopnamespacehandler
extends
namespacehandlersupport for the
* 'config
', 'spring-configured
', 'aspectj-autoproxy
'
* and 'scoped-proxy
' tags.
*/
public
void
init()
}
spring自身除beans命名空間之外的命名空間解析過程用到了這一套實現邏輯,一些針對spring的擴充套件框架也用到了這一邏輯,典型的比如 阿里的dubbo
SQL SERVER Buffer Pool擴充套件
buffer pool擴充套件是buffer pool 和非易失的ssd硬碟做連線。以ssd硬碟的特點來提高隨機讀效能。在buffer pool 擴充套件之前,sql server 從磁碟中讀入資料,並且存放在buffer pool中以供讀取和修改,修改完之後髒資料還是放在buffer pool中,...
dilated convolutions 擴張卷積
最近在閱讀 context encoding for semantic segmentation 中看到應用了dilated convolutions。擴張卷積與普通的卷積相比,除了卷積核的大小以外,還有乙個擴張率 dilation rate 引數,主要用來表示擴張的大小。擴張卷積與普通卷積的相同點...
關於 qtpropertybrowser 擴充套件問題
qtpropertybrowser 是乙個基於qt開發的屬性展示控制項,功能強大。在windows平台,使用vc編譯工具,如果將qtpropertybrowser 此庫編譯成dll時,在程式中直接使用原始類沒有問題,但如果自定義派生類且使用到訊號槽時就會遇到乙個編譯問題,這個問題歸根結底在於有沒有使...