zoukankan      html  css  js  c++  java
  • spring学习(一)(beans.xml的注值配置)

    在spring 刚开始学习的时候,就只有简单的注值,在beans.xml中进行配置,将各种类交给spring来管理。这里,有几种简单的beans.xml的配置方法。

    有多种bean的配置方法,大体上分为三种,一种为通过构造函数来配置,一种通过属性来配置,还有一种是通过p空间来配置。一下来简单说说这三种配置方法。

    配置之前,先来几个实体类,以下的配置都是基于这几个实体类。

    package com.yc.spring02;
    
    public class Student {
        
        private String sid;
        private String name;
        private String  sex;
        
        private Address address;
    
        @Override
        public String toString() {
            return "Student [sid=" + sid + ", name=" + name + ", sex=" + sex + ", address=" + address + "]";
        }
    
        public String getSid() {
            return sid;
        }
    
        public void setSid(String sid) {
            this.sid = sid;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public Address getAddress() {
            return address;
        }
    
        public void setAddress(Address address) {
            this.address = address;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            result = prime * result + ((sex == null) ? 0 : sex.hashCode());
            result = prime * result + ((sid == null) ? 0 : sid.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Student other = (Student) obj;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            if (sex == null) {
                if (other.sex != null)
                    return false;
            } else if (!sex.equals(other.sex))
                return false;
            if (sid == null) {
                if (other.sid != null)
                    return false;
            } else if (!sid.equals(other.sid))
                return false;
            return true;
        }
    
        public Student(String sid, String name, String sex) {
            super();
            this.sid = sid;
            this.name = name;
            this.sex = sex;
        }
    
        public Student() {
            super();
        }
    
        public Student(String sid, String name, String sex, Address address) {
            super();
            this.sid = sid;
            this.name = name;
            this.sex = sex;
            this.address = address;
        }
        
        public Student(Address address){
            this.address = address;
        }
        
    }
    Student.java

    Address类:

    package com.yc.spring02;
    
    public class Address {
        private String country;
        private String city;
        
        @Override
        public String toString() {
            return "Address [country=" + country + ", city=" + city + "]";
        }
    
        public String getCountry() {
            return country;
        }
    
        public void setCountry(String country) {
            this.country = country;
        }
    
        public String getCity() {
            return city;
        }
    
        public void setCity(String city) {
            this.city = city;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((city == null) ? 0 : city.hashCode());
            result = prime * result + ((country == null) ? 0 : country.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Address other = (Address) obj;
            if (city == null) {
                if (other.city != null)
                    return false;
            } else if (!city.equals(other.city))
                return false;
            if (country == null) {
                if (other.country != null)
                    return false;
            } else if (!country.equals(other.country))
                return false;
            return true;
        }
    
        public Address(String country, String city) {
            super();
            this.country = country;
            this.city = city;
        }
    
        public Address() {
            super();
        }
        
        
        
        
    }
    Address

    关系:Student类中有一个address属性,该属性的类型是Address

    好了现在简单来讲讲bean的配置。

    (一)通过构造函数来配置。

       <!-- 通过构造函数注值 
                有三种方法,方法一:不指定具体的属性,但是要按照构造方法的顺序来注值
            -->
            <bean id="student01" class="com.yc.spring02.Student">
                <constructor-arg value="YC001"></constructor-arg>
                <constructor-arg value="yc"></constructor-arg>
                <constructor-arg value="男"></constructor-arg>
            </bean>
            
            <!-- 方法二:指定具体属性,顺序可以不管 -->
             <bean id="student02" class="com.yc.spring02.Student">
                <constructor-arg name = "name" value="yc"></constructor-arg>
                <constructor-arg name = "sex" value="男"></constructor-arg>
                <constructor-arg name = "sid" value="YC001"></constructor-arg>
            </bean>
            
            <!-- 方法三:通过指定索引来注值,索引下标从0开始, 索引的位置必须要与构造函数的参数顺序对应 -->
             <bean id="student03" class="com.yc.spring02.Student">
                <constructor-arg index="1" value="yc"></constructor-arg>
                <constructor-arg index="2" value="男"></constructor-arg>
                <constructor-arg index="0" value="YC001"></constructor-arg>
            </bean>
        

    注意:要想要构造方法配置,则在实体类中必须要有对应的构造方法。

    (二)通过属性来配置

    注意:通过属性来配置时,要有实体类中要有对应的set方法,如果没有,则配置失败

             <!-- 给属性赋空值,如果使用的是property的方式,则不写属性就可以注为空值,详见如下:给address注空值 -->
             <bean id="student06" class="com.yc.spring02.Student">
                <property name="sid" value="yc001"></property>
                 <property name="name" value="yc"></property>
                 <property name="sex" value="男"></property>
            <property name="address" ref="addr01"></property><!-- 引用另一个bean的id-->
    </bean>

    来个小结:关于构造方法配置和属性配置两种,可以混用,同时,还有一些骚操作,如下:

     <bean id="student07" class="com.yc.spring02.Student">
                <constructor-arg index="1" value="yc"></constructor-arg>
                <constructor-arg index="2" value="男"></constructor-arg>
                <constructor-arg index="0" value="YC001"></constructor-arg>
                <constructor-arg index="3">
                    <null/>
                </constructor-arg>
             </bean>
             
             
            <!-- 在注值中添加特殊字符 -->
                <bean id="addr01" class="com.yc.spring02.Address">
                    <property name="country" value="中国"></property>
                    <property name="city">
                        <!-- CDATA[]:表示字符串的意思 -->                
                        <value><![CDATA[<衡阳>]]></value>
                    </property>
                </bean>
                <!-- 注值混用 :构造方法和属性注值方法混用-->
                 <bean id="student04" class="com.yc.spring02.Student">
                <constructor-arg index="1" value="yc"></constructor-arg>
                <constructor-arg index="2" value="男"></constructor-arg>
                <constructor-arg index="0" value="YC001"></constructor-arg>
                <property name="address" ref = "addr01"></property><!-- 引用另一个bean的id-->
            </bean>
            
            <!-- 注值嵌套使用 -->
             <bean id="student05" class="com.yc.spring02.Student">
                 <property name="sid" value="yc001"></property>
                 <property name="name" value="yc"></property>
                 <property name="sex" value="男"></property>
                 <property name="address" ><!-- 不使用引用,直接嵌套进来 -->
                     <bean class="com.yc.spring02.Address">
                         <property name="country" value="中国"></property>
                         <property name="city" value="长沙"></property>
                     </bean>
                 </property>
             </bean>
            

    (三)p命名空间的使用,p命名空间可以是配置简化,要想使用p空间,则要添加p空间的声明:xmlns:p="http://www.springframework.org/schema/p" ,放在beans标签里面,

    具体p空间的使用如下:

        <!-- p命名空间的使用 -->
             
             <!-- 如果属性引用的是另一个对象,则使用p:属性名-ref="id值" -->
             <!-- 手动装配 -->
             <bean id="student08" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男" p:address-ref="addr01"></bean> 
             
             <!-- 自动装配 
                 byName :根据名字装配,要求属性名和id值要相同,必须要求这个xml里面有一个属性名和id值相同的才能够注值成功
             -->
             <bean id="student09" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男"  autowire="byName"></bean> 
             
             <bean id="address" class="com.yc.spring02.Address">
                    <property name="country" value="中国"></property>
                    <property name="city" value="常数"></property>
               </bean>
             
             <!-- byType:根据类型自动装配,那么要求在容器里面这个类型只有一个对象存在, 如果有多个bean里面的类路径和要装配的对象类路径相同,则装配不成功 -->
             <!-- <bean id="student11" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男"  autowire="byType"></bean> 
              -->
             
             <!-- default :默认情况下不自动装配 -->
              <bean id="student12" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男"  autowire="default"></bean> 
             
             
             <!-- 根据 构造方法装配-->
             <bean id="student13" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男"  autowire="constructor"></bean> 
             
             
                 <!-- bean与bean之间的关系 
                 继承:parent:
                 依赖:depends-on
              -->
              <!-- 继承 -->
              <bean id="addr03" class="com.yc.spring02.Address" p:country="湖南" p:city="长沙" ></bean>
             <bean id="addr04" class="com.yc.spring02.Address" parent="addr03" p:city="衡阳"></bean>
             <!-- 依赖
                 如果没有写依赖,则自动注值的时候如果找不到对应的id,则不会报错,只会不注值;如果写了依赖,则找不到的时候就会报错
              -->
             <bean id="student10" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男"  autowire="byName" depends-on="address"></bean> 
            
            <!-- bean的作用域范围
                singleton:单例模式,默认就是这个
                prototype:每次通过getBean()方法都会重新生成一个实例
             -->
             <bean id="student14" class="com.yc.spring02.Student" p:sid="yc002" p:name="yc" p:sex="男" p:address-ref="addr01" scope="prototype"></bean> 
            
            

    当然,在beans.xml中还可以引用另一个xml配置文件:

     <!-- 导入另一个XMl文件 -->
            <import resource="list.xml" />
           
  • 相关阅读:
    配置gulpfile,添加task任务
    requestAnimationFrame初探
    实现图片的预加载和懒加载
    jquery实现复制到粘贴板
    微信H5页面遇到的一些问题
    js实现日历的简单算法
    handlebars.js的运用与整理
    倒计时插件
    div 模拟<select>事件
    Emacs添加主题插件(Win系统)
  • 原文地址:https://www.cnblogs.com/1998xujinren/p/11234553.html
Copyright © 2011-2022 走看看