• 7 -- Spring的基本用法 -- 11... 基于XML Schema的简化配置方式


        7.11 基于XML Schema的简化配置方式

          Spring允许使用基于XML Schema的配置方式来简化Spring配置文件。

          7.11.1 使用p:命名空间简化配置

            p:命名空间不需要特定的Schema定义,它直接存在于Spring内核中。

            当导入p:命名空间之后,就可直接在<bean.../>元素中使用属性来驱动执行setter方法。即用于简化设置注入

            Class : SteelAxe

    package edu.pri.lime._7_11_1.bean;
    
    public class SteelAxe implements Axe {
    
        public String chop() {
            return "用钢斧砍材真快";
        }
    
    }

            Class : Chinese

    package edu.pri.lime._7_11_1.bean.impl;
    
    import edu.pri.lime._7_11_1.bean.Axe;
    import edu.pri.lime._7_11_1.bean.Person;
    
    public class Chinese implements Person{
    
        private Axe axe;
        private int age;
        public Chinese() {
            super();
            // TODO Auto-generated constructor stub
        }
        public Axe getAxe() {
            return axe;
        }
        public void setAxe(Axe axe) {
            this.axe = axe;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public void useAxe(){
            System.out.println(axe.chop());
            System.out.println("age成员变量的值:" + age);
        }
        
    }

            导入XML Schema里的p:命名空间

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
    <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-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">

            XML :

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
    <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-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
        <!-- 配置steelAxe实例,其实现类是SteelAxe -->
        <bean id="steelAxe" class="edu.pri.lime._7_11_1.bean.SteelAxe"/>
        <!-- 配置chinese实例,其实现类是Chinese -->
        <!-- 使用属性配置对age、axe执行设置注入 -->
        <!-- 使用p:命名空间时,Bean的属性名不能以-ref结尾 -->
        <bean id="chinese" class="edu.pri.lime._7_11_1.bean.impl.Chinese" p:age="30" p:axe-ref="steelAxe" />
    </beans>

            Class :SpringTest

    package edu.pri.lime._7_11_1.main;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import edu.pri.lime._7_11_1.bean.Person;
    import edu.pri.lime._7_11_1.bean.impl.Chinese;
    
    public class SpringTest {
    
        public static void main(String[] args){
            ApplicationContext ctx = new ClassPathXmlApplicationContext("app_7_11_1.xml");
            Person chinese = ctx.getBean("chinese",Chinese.class);
            chinese.useAxe();
        }
    }

            Console : 

    用钢斧砍材真快
    age成员变量的值:30

          7.11.2 使用c:命名空间简化配置

            c:命名空间用于简化构造注入

            Class : Chinese

    package edu.pri.lime._7_11_2.bean.impl;
    
    import edu.pri.lime._7_11_2.bean.Axe;
    import edu.pri.lime._7_11_2.bean.Person;
    
    public class Chinese implements Person{
    
        private Axe axe;
        private int age;
        
    
        public Chinese() {
            super();
        }
    //    构造注入所需的带参数的构造器
        public Chinese(Axe axe, int age) {
            super();
            this.axe = axe;
            this.age = age;
        }
    
        public void useAxe() {
            System.out.println(axe.chop());
            System.out.println("age成员变量的值:" + age);
            
        }
        public Axe getAxe() {
            return axe;
        }
        public void setAxe(Axe axe) {
            this.axe = axe;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    
    }

            Class : SteelAxe

    package edu.pri.lime._7_11_2.bean.impl;
    
    import edu.pri.lime._7_11_2.bean.Axe;
    
    public class SteelAxe implements Axe{
    
        public String chop() {
            return "用钢斧砍材真快";
        }
    
    }

            导入c:命名空间

    <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"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">

            XML : 

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
    <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"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
        <!-- 配置steelAxe实例,其实现类是SteelAxe -->
        <bean id="steelAxe" class="edu.pri.lime._7_11_2.bean.impl.SteelAxe"/>
        <!-- 配置chinese实例,其实现类是Chinese -->
        <!-- 使用属性配置对age、axe执行设置注入 -->
        <!-- 使用p:命名空间时,Bean的属性名不能以-ref结尾 -->
        <bean id="chinese" class="edu.pri.lime._7_11_2.bean.impl.Chinese" c:age="30" c:axe-ref="steelAxe" />
    </beans>

            Class : SpringTest

    package edu.pri.lime._7_11_2.main;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import edu.pri.lime._7_11_2.bean.Person;
    import edu.pri.lime._7_11_2.bean.impl.Chinese;
    
    public class SpringTest {
    
        public static void main(String[] args){
            ApplicationContext ctx = new ClassPathXmlApplicationContext("app_7_11_2.xml");
            Person chinese = ctx.getBean("chinese",Chinese.class);
            chinese.useAxe();
        }
    }

            使用c:指定构造器参数的格式为:c:构造器参数名=“值” 或 c:构造器参数名-ref=“其他Bean的id”。

            通过索引来配置构造器参数的方式:

    <bean id="chinese" class="edu.pri.lime._7_11_2.bean.impl.Chinese" c:_0-ref = "steelAxe" c:_1="21" />

            通过索引来配置构造器参数的格式:c:_N=“值” 或 c:_N-ref=“其他Bean的id” 其中N代表第N个构造器参数。

          7.11.3 使用util:命名空间简化配置

            在Spring框架解压缩包的schemautil路径下包含有util:命名空间的XML Schema文件,为了使用util:命令空间的元素,必须先在Spring配置文件中导入最新的spring-util-4.0.xsd,也就是需要在Spring配置文件中增加如下配置:

    <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"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">

            在util Schema下提供了如下几个元素:

              ⊙ constant :该元素用于获取指定类的静态Field的值。它是FieldRetrievingFactoryBean的简化配置。

              ⊙ property-path : 该元素用于获取指定对象的getter方法的返回值。它是PropertyPathFactoryBean的简化配置。

              ⊙ list : 该元素用于定义一个List Bean,支持使用<value.../>、<ref.../>、<bean.../>等子元素来定义List集合元素。

                使用该标签支持如下三个属性:

                ◎ id : 该属性指定定义一个名为id 的List Bean实例。

                ◎ list-class : 该属性指定Spring使用哪个List实现类来创建Bean实例。默认使用ArrayList作为实现类。

                ◎ scope : 指定该List Bean实例的作用域。

              ⊙ set : 该元素用于定义一个Set Bean,支持使用<value.../>、<ref.../>、<bean.../>等子元素来定义Set元素集合。

                ◎ id : 该属性指定定义一个名为id的Set Bean实例。

                ◎ set-class : 该属性指定Spring 使用哪个Set实现类来创建Bean实例。默认使用HashSet作为实现类。

                ◎ scope : 指定该Set Bean实例的作用域。

              ⊙ map : 该元素用于指定一个Map Bean,支持使用<entry.../>来定义Map的key-value对。

                使用该标签支持如下三个属性:

                ◎ id 该属性指定定义一个名为id的Map Bean实例。

                ◎ map-class : 该属性指定Spring使用哪个Map实现类来创建Bean实例。默认使用HashMap作为实现类。

                ◎ scope : 指定该Map Bean 实例的作用域。

              ⊙ properties : 该元素用于加载一份资源文件,并根据加载的资源文件创建一个Properties Ben 实例。

                使用该标签可指定如下几个属性:

                ◎ id : 该属性指定定义一个名为id 的Properties Bean实例。

                ◎ location : 指定资源文件的位置。

                ◎ scope : 指定该Properties Bean实例的作用域。

              Class : Chinese

    package edu.pri.lime._7_11_3.bean.impl;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import edu.pri.lime._7_11_3.bean.Axe;
    import edu.pri.lime._7_11_3.bean.Person;
    
    public class Chinese implements Person{
    
        private Axe axe;
        private int age;
        private List schools;
        private Map scores;
        private Set axes;
        
        public Chinese() {
            super();
        }
        public void useAxe() {
            System.out.println(axe.chop());
            System.out.println("age属性值:" + age);
            System.out.println(schools);
            System.out.println(scores);
            System.out.println(axes);
        }
        public Axe getAxe() {
            return axe;
        }
        public void setAxe(Axe axe) {
            this.axe = axe;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public List getSchools() {
            return schools;
        }
        public void setSchools(List schools) {
            this.schools = schools;
        }
        public Map getScores() {
            return scores;
        }
        public void setScores(Map scores) {
            this.scores = scores;
        }
        public Set getAxes() {
            return axes;
        }
        public void setAxes(Set axes) {
            this.axes = axes;
        }
    
    }

            导入util:命名空间Schema

    <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"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">

            XML : 

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
    <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"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
        <bean id="steelAxe" class="edu.pri.lime._7_11_3.bean.impl.SteelAxe"/>
        <util:list id="chin.schools" list-class="java.util.LinkedList">
            <value>小学</value>
            <value>中学</value>
            <value>大学</value>
        </util:list>
        <util:map id="chin.scores" map-class="java.util.HashMap">
            <entry key="数学" value="100"/>
            <entry key="语文" value="100"/>
            <entry key="英语" value="100"/>
        </util:map>
        <util:set id="chin.axes" set-class="java.util.HashSet">
            <value>字符串</value>
            <bean class="edu.pri.lime._7_11_3.bean.impl.SteelAxe"/>
            <ref bean="chin.schools"/>
        </util:set>
        <bean id="chinese" class="edu.pri.lime._7_11_3.bean.impl.Chinese" p:axe-ref="steelAxe" 
          p:age
    ="20" p:schools-ref="chin.schools" p:scores-ref="chin.scores" p:axes-ref="chin.axes"/> </beans>

        Class : SpringTest

    package edu.pri.lime._7_11_3.main;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import edu.pri.lime._7_11_3.bean.Person;
    import edu.pri.lime._7_11_3.bean.impl.Chinese;
    
    
    public class SpringTest {
    
        public static void main(String[] args){
            ApplicationContext ctx = new ClassPathXmlApplicationContext("app_7_11_3.xml");
            Person chinese = ctx.getBean("chinese",Chinese.class);
            chinese.useAxe();
        }
    }

            除此之外,关于Spring其他常用的简化Schema简要说明如下:

            ⊙ spring-aop-4.0.xsd :用于简化Spring AOP配置的Schema。

            ⊙ spring-jee-4.0.xsd : 用于简化Spring 的Java EE 配置的Schema。

            ⊙ spring-jms-4.0.xsd : 用于简化Spring关于JMS 配置的Schema。

            ⊙ spring-lang-4.0.xsd : 用于简化Spring 动态语言配置的Schema。

            ⊙ spring-tx-4.0.xsd : 用于简化Spring事务配置的Schema。

    啦啦啦

  • 相关阅读:
    DTN相关研究机构介绍之Comnet@tkk
    Contact
    MyEclips注册码生成
    对list排序,按名字排,如果名字一样就按年龄排
    在JSP页面中获取当前日期时间
    javascript全局变量怎么定义?
    理解了java一次编译多处运行的意思了
    HTML <td> 标签的 nowrap 属性
    <! >
    java.io.File中的绝对路径和相对路径.
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/6286964.html
Copyright © 2020-2023  润新知