自定義標籤使用

(1)定義普通bean類

public class User {    
    private String id;    
    private String userName;    
    private String email;    
    public String getId() {    
        return id;    
    }    
    public void setId(String id) {    
        this.id = id;    
    }    
    public String getUserName() {    
        return userName;    
    }    
    public void setUserName(String userName) {    
        this.userName = userName;    
    }    
    public String getEmail() {    
        return email;    
    }    
    public void setEmail(String email) {    
        this.email = email;    
    }    
}  

(2)定義一個AbstractSingleBeanDefinitionParser,實現這個類裏面的一個doParser和getBeanClass方法

public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {    
    @Override    
    protected Class<?> getBeanClass(Element element) {    
        return User.class;    
    }    
    @Override    
    protected void doParse(Element element, BeanDefinitionBuilder builder) {    
        String userName=element.getAttribute("userName");    
        String email=element.getAttribute("email");    
        if(StringUtils.hasText(userName)){    
            builder.addPropertyValue("userName", userName);    
        }    
        if(StringUtils.hasText(email)){    
            builder.addPropertyValue("email", email);    
        }    
    }    
} 
(3)定義一個nameSpaceHandlerSupport,用於註冊到Spring框架裏面,在spring解析算定義標籤的時候可以用我們自定義的處理方式
public class MyUserNamespaceHandler extends NamespaceHandlerSupport {    
    
    @Override    
    public void init() {    
        registerBeanDefinitionParser("user",new UserBeanDefinitionParser());    
    }    
}  

(4)創建一個xsd爲後綴的文件spring-user.xsd

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

(5)在META-INF下面創建兩個文件spring.handlers和spring.schemas,內容如下:

spring.handlers:

http\://www.wjs.com/schema/user=com.wjs.cosumertag.MyUserNamespaceHandler  
spring.schemas:
http\://www.wjs.com/schema/user.xsd=META-INF/spring-user.xsd  

(6)在配置文件中我們測試使用自定義的標籤:user.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:aop="http://www.springframework.org/schema/aop"    
    xmlns:context="http://www.springframework.org/schema/context"    
    xmlns:mvc="http://www.springframework.org/schema/mvc"    
    xmlns:tx="http://www.springframework.org/schema/tx"    
    xmlns:myTag="http://www.wjs.com/schema/user"    
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd    
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd    
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd    
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-5.0.xsd    
        http://www.wjs.com/schema/user http://www.wjs.com/schema/user.xsd">    
     
 <myTag:user id="22" userName="測試" email="[email protected]"/>    
</beans>  

(7)測試的java類Main.java內容如下:

public class CustomerTagTest {    
    public static void main(String[] args) {    
        ApplicationContext beans=new ClassPathXmlApplicationContext("classpath:user.xml");    
        User user=(User)beans.getBean("testBean");    
        System.out.println("username:"+user.getUserName()+":"+"email:"+user.getEmail());    
    }    
}   
上一篇:Spring IOC容器的初始化(二)

下一篇:  自定義標籤解析源碼分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章