Spring--自定義標(biāo)簽實(shí)例

1. 在resource目錄下創(chuàng)建META-INF

在META-INF目錄下創(chuàng)建spring.hanlders: 指定NamespaceHandler膀息;spring.schemas: 指定xsd模版文件. Spring 在初始化的時(shí)候,會(huì)自動(dòng)到META-INF文件下掃描spring.handlers 和 spring.schemas文件

  • spring.handlers (前面的key隨意指定)
http\://www.test.com/schema/apple=com.webgroup.test.handlers.MyNameSpaceHandler

-spring.schemas(指定xsd文件路徑)

http\://www.test.com/schema/apple.xsd=/custome-apple.xsd

2. 創(chuàng)建xsd文件

xmlns, targetNameSpace 指定的是在spring.handlers 中自定義的key

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.test.com/schema/apple"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.test.com/schema/apple">
    <xsd:complexType name="apple">
        <xsd:attribute name ="id" type="xsd:string"></xsd:attribute>
        <xsd:attribute name="name" type="xsd:string"> </xsd:attribute>
    </xsd:complexType>
    <xsd:element name="apple" type="apple"></xsd:element>
</xsd:schema>

3. 創(chuàng)建NameSpaceHandler

public class MyNameSpaceHandler extends NamespaceHandlerSupport {
    @Override
    public void init() {
        registerBeanDefinitionParser("apple", new AppleBeanDefinitionParser());
    }
}

NameSpaceHander管理著complexType 和 BeanDefinitionParser的一一對(duì)應(yīng)關(guān)系拉背。上文中指定的"apple" 要和xsd文件中定義的complexType名保持一致员舵。

4. 創(chuàng)建BeanDefinitionParser

public class AppleBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
    @Override
    protected Class<?> getBeanClass(Element element) {
        return Apple.class;
    }
    @Override
    protected void doParse(Element element, BeanDefinitionBuilder builder) {
        String id = element.getAttribute("id");
        String name = element.getAttribute("name");
        if (StringUtils.isNotEmpty(id)) {
            builder.addPropertyValue("id", id);
        }
        if (StringUtils.isNotEmpty(name)) {
            builder.addPropertyValue("name", name);
        }
    }
}

BeanDefinitionParser將屬性值從文件里讀出來(lái)工扎,并寫(xiě)在BeanDefinitionBuilder中泪酱。

5. 測(cè)試xml文件

<?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:mytest="http://www.test.com/schema/apple"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.test.com/schema/apple http://www.test.com/schema/apple.xsd">
    <mytest:apple id="1234" name="nameTest"/>
</beans>

xsi:schemaLocation 指定的是spring官方、自定義的nameSpaceHandler和xds文件的路徑娃殖;

6.測(cè)試類

@Controller
public class TestController {
    @Autowired
    private Apple apple;

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public String test() {
        return  apple.getName();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末值戳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炉爆,更是在濱河造成了極大的恐慌堕虹,老刑警劉巖卧晓,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赴捞,居然都是意外死亡逼裆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赦政,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胜宇,“玉大人,你說(shuō)我怎么就攤上這事恢着⊥┯洌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵掰派,是天一觀的道長(zhǎng)从诲。 經(jīng)常有香客問(wèn)我,道長(zhǎng)靡羡,這世上最難降的妖魔是什么系洛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮略步,結(jié)果婚禮上描扯,老公的妹妹穿的比我還像新娘。我一直安慰自己趟薄,他們只是感情好绽诚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著杭煎,像睡著了一般憔购。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岔帽,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音导绷,去河邊找鬼犀勒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妥曲,可吹牛的內(nèi)容都是我干的贾费。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼檐盟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼褂萧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起葵萎,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤导犹,失蹤者是張志新(化名)和其女友劉穎唱凯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谎痢,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磕昼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了节猿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票从。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滨嘱,靈堂內(nèi)的尸體忽然破棺而出峰鄙,到底是詐尸還是另有隱情,我是刑警寧澤太雨,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布吟榴,位于F島的核電站,受9級(jí)特大地震影響躺彬,放射性物質(zhì)發(fā)生泄漏煤墙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一宪拥、第九天 我趴在偏房一處隱蔽的房頂上張望仿野。 院中可真熱鬧,春花似錦她君、人聲如沸脚作。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)球涛。三九已至,卻和暖如春校镐,著一層夾襖步出監(jiān)牢的瞬間亿扁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工鸟廓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留从祝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓引谜,卻偏偏與公主長(zhǎng)得像牍陌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子员咽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 傍晚3個(gè)小朋友坐在月光下吃月餅毒涧,他們各自帶了自己的月餅、零食贝室、飲料契讲、水果仿吞。小明給小紅一個(gè)蘋果,小紅給小明...
    小黃俊杰閱讀 477評(píng)論 0 7
  • 2018年6月29日 星期五 晴 學(xué)經(jīng)人員:琪佳媽怀泊、琪琪茫藏、佳佳。 寶貝年齡:琪琪10歲霹琼,佳佳9歲务傲。 學(xué)經(jīng)周期:3年...
    順德琪佳媽閱讀 242評(píng)論 0 1
  • 前幾天售葡,朋友安拉從外地旅游回來(lái),心意十足的給我?guī)Щ亓艘淮蟀?dāng)?shù)靥禺a(chǎn)忠藤。有餅啊挟伙,干果啊還有特制的手工糖果啊,等等模孩。...
    千里秀閱讀 1,074評(píng)論 0 1