spring 自定义schema

来源:互联网 发布:淘宝炉石60包专店 编辑:程序博客网 时间:2024/05/30 04:08

扩展schema,定义自己的bean属性。。不错!

主要:

1,定义META-INF下.xsd文件,这里是people.xsd;定义spring.handlers;定义spring.schemas

2,定义namaspace解析类,这里是StudentNamespaceHandler

3,定义beanDefinition,这里是StudentBeanDefinitionParser

4,当然还有相关的javabean定义,这里是Student.java

详细代码:

people.xsd

<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns="http://www.luyee.com/bat/schema/people"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"targetNamespace="http://www.luyee.com/bat/schema/people"elementFormDefault="qualified" attributeFormDefault="unqualified">    <xsd:import namespace="http://www.springframework.org/schema/beans" />    <xsd:element name="student"> <xsd:complexType>              <xsd:complexContent>                  <xsd:extension base="beans:identifiedType">                                     <xsd:attribute name="name"type="xsd:string"><xsd:annotation><xsd:documentation>姓名 </xsd:documentation></xsd:annotation></xsd:attribute>                     <xsd:attribute name="age"type="xsd:string"><xsd:annotation><xsd:documentation>年龄</xsd:documentation></xsd:annotation></xsd:attribute>                                     </xsd:extension>              </xsd:complexContent>          </xsd:complexType>      </xsd:element>     </xsd:schema>
spring.handlers;

http\://www.luyee.com/bat/schema/people=com.luyee.bat.spring.StudentNamespaceHandler
spring.schemas

http\://www.luyee.com/bat/schema/people.xsd=META-INF/people.xsd


StudentNamespaceHandler和StudentBeanDefinitionParser

package com.luyee.bat.spring;import java.text.SimpleDateFormat;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;import org.springframework.beans.factory.xml.NamespaceHandlerSupport;import org.springframework.util.StringUtils;import org.w3c.dom.Element;public class StudentNamespaceHandler  extends NamespaceHandlerSupport {public void init() {registerBeanDefinitionParser("student", new StudentBeanDefinitionParser());  }class StudentBeanDefinitionParser extends AbstractSingleBeanDefinitionParser{ protected Class getBeanClass(Element element) {          return Student.class;      }        protected void doParse(Element element, BeanDefinitionBuilder bean) {          String name = element.getAttribute("name");          bean.addPropertyValue("name", name);          String age = element.getAttribute("age");          if (StringUtils.hasText(age)) {              bean.addPropertyValue("age", Integer.valueOf(age));          }      }  }}
JavaBean:Student

package com.luyee.bat.spring;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

测试:applicationContex.xml(people:student就好比bean)

<?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:people="http://www.luyee.com/bat/schema/people"      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd      http://www.luyee.com/bat/schema/people http://www.luyee.com/bat/schema/people.xsd" >      <people:student id="student1" name="student1"          age="18" />              <people:student id="student2" name="student2"          age="20" />    </beans> 
StudentXsdTest.java

package com.luyee.bat.spring;  import org.springframework.context.ApplicationContext;  import org.springframework.context.support.ClassPathXmlApplicationContext;    public class StudentXsdTest {        public static void main(String[] args) {          ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");          Student student1 = (Student) ctx.getBean("student1");          Student student2 = (Student) ctx.getBean("student2");          System.out.println("name: " +student1.getName()+" age :" + student1.getAge());          System.out.println("name: " +student2.getName()+" age :" + student2.getAge());      }  }  

输出:

八月 13, 2013 8:50:50 下午 org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@46f7ba12: startup date [Tue Aug 13 20:50:50 CST 2013]; root of context hierarchy八月 13, 2013 8:50:50 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [applicationContext.xml]八月 13, 2013 8:50:52 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@25e9a396: defining beans [student1,student2]; root of factory hierarchyname: student1 age :18name: student2 age :20

最后贴个文件结构


原创粉丝点击