• 03-spring学习-属性配置细节


    配置bean的一些细节

    字面值

    如果包含特殊符号,直接写会报错。可以用这个<![CDATA[]]>包裹起来

    比如这里的配置属性里面的value值包含<>等特殊符号,直接写会报错。可以用这个<![CDATA[]]>包裹起来。

    <bean id="car2" class="com.spring.beans.Car" >
            <constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
            <constructor-arg index="1" type="java.lang.String">
                <value><![CDATA[<shanghai^>]]></value>
            </constructor-arg>
            <constructor-arg  type="double">
                <value>250</value>
            </constructor-arg>
        </bean>

    引用其他bean

    可以使用<ref>元素或者property的ref属性,建立bean之间的引用关系

    比如这里有个person类,里面有个属性是Car类。在配置bean的时候,需要给car属性赋值,这时候可以使用ref属性。

    person类:

    package com.spring.beans;
    
    public class Person {
    
        private String name;
        private int age;
        
        private Car car;
    
        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;
        }
    
        public Car getCar() {
            return car;
        }
    
        public void setCar(Car car) {
            this.car = car;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
        }
        
    }

    配置:可以使用property的ref属性,建立bean之间的引用关系

        <!-- 如果包含特殊符号,直接写会报错。可以用这个<![CDATA[]]>包裹起来 -->
        <bean id="car2" class="com.spring.beans.Car" >
            <constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
            <constructor-arg index="1" type="java.lang.String">
                <value><![CDATA[<shanghai^>]]></value>
            </constructor-arg>
            <constructor-arg  type="double">
                <value>250</value>
            </constructor-arg>
        </bean>
        
        <bean id="person" class="com.spring.beans.Person">
            <property name="name" value="Tom"></property>
            <property name="age" value="24"></property>
            <!-- 可以使用property的ref属性,建立bean之间的引用关系 -->
            <property name="car" ref="car2"></property>
        </bean>

    或者使用<ref>元素配置:

      <bean id="person" class="com.spring.beans.Person">
            <property name="name" value="Tom"></property>
            <property name="age" value="24"></property>
            <!-- 可以使用property的ref属性,建立bean之间的引用关系 -->
            <!-- <property name="car" ref="car2"></property>  -->
            <property name="car">
                <ref bean="car2"></ref>
            </property> 
        </bean>

    使用这个person类。

             Car car=(Car) ctx.getBean("car");
             Car car2=(Car) ctx.getBean("car2");
             System.out.println(car);
             System.out.println(car2);
             
             Person person=(Person) ctx.getBean("person");
             System.out.println(person);

    运行结果:

     也可以在属性或者构造器中包含Bean的声明,这样的bean称为内部bean。

        <bean id="person" class="com.spring.beans.Person">
            <property name="name" value="Tom"></property>
            <property name="age" value="24"></property>
             <property name="car">
                 <bean class="com.spring.beans.Car">
                     <constructor-arg value="Ford"></constructor-arg>
                     <constructor-arg value="changan"></constructor-arg>
                     <constructor-arg value="200" type="double"></constructor-arg>
                 </bean>
             </property>
        </bean>

     

    比如注入null值:

    为级联属性赋值:

    集合属性

    使用list节点为list类型的属性赋值

    这里拿<list>来做例子:

    例如:

    package com.spring.beans.collections;
    import java.util.List;
    import com.spring.beans.Car;
    
    public class Person {
    
        private String name;
        private int age;
        
        private List<Car> cars;
     
        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;
        }
    
        public List<Car> getCars() {
            return cars;
        }
    
        public void setCars(List<Car> cars) {
            this.cars = cars;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]";
        }
    }

    配置:

    <!-- 测试集合属性 -->
        <bean id="person3" class="com.spring.beans.collections.Person">
            <property name="name" value="mike"></property>
            <property name="age" value="27"></property>
        <!-- 使用list节点为list类型的属性赋值 --> <property name="cars"> <list> <ref bean="car"></ref> <ref bean="car2"></ref> </list> </property> </bean>

    运行:

    set集合的使用跟list集合差不多类似;

    Map集合的使用如下:

    新建一个newPerson类:

    package com.spring.beans.collections;
    import java.util.Map;
    import com.spring.beans.Car;
    
    public class NewPerson {
    
        private String name;
        private int age;  
        private Map<String,Car> cars;
     
        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;
        }
        public Map<String,Car> getCars() {
            return cars;
        }
    
        public void setCars(Map<String,Car> cars) {
            this.cars = cars;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]";
        }
    }

    配置:

    <!-- 测试Map集合属性 -->
        <bean id="person3" class="com.spring.beans.collections.NewPerson">
            <property name="name" value="rose"></property>
            <property name="age" value="28"></property>
            <property name="cars">
                <map>
                    <entry key="AA" value-ref="car"></entry>
                    <entry key="BB" value-ref="car2"></entry>
                </map>
            </property>
        </bean>

     配置properties属性值 

     使用props 和 prop 为属性 properties 赋值

    package com.spring.beans.collections;
    import java.util.Properties;
    
    public class DataSource {
    
        private Properties properties;
    
        public Properties getProperties() {
            return properties;
        }
        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    
        @Override
        public String toString() {
            return "DataSource [properties=" + properties + "]";
        }  
    }

    配置:

        <!-- 配置properties属性值 -->
        <bean id="dataSource" class="com.spring.beans.collections.DataSource">
            <!-- 使用props 和 prop 为属性 properties 赋值 -->
            <property name="properties">
                <props>
                    <prop key="user">root</prop>
                    <prop key="password">911581</prop>
                    <prop key="jdbcurl">jdbc:mysql:///sys</prop>
                    <prop key="driverClass">com.mysql.jdbc.Driver</prop>
                </props>
            </property>
        </bean>

    运行结果:

     配置单例的集合bean

     配置单例的集合bean,以供多个bean使用,需要导入util命名空间。

    为了导入util命名空间,需要到这里勾选上util。

    然后配置如下:

    以list集合的集合bean为例:

       <!-- 配置单例的集合bean,以供多个bean进行引用,需要导入util命名空间 -->
        <util:list id="cars5">
            <ref bean="car1"></ref>
            <ref bean="car2"></ref>
        </util:list>

    对于其他类型的集合,直接把list换成对应的集合类型名就行,然后util里面的内容按照上面的集合配置即可。

    使用直接用ref即可:

        <bean id="person4" class="com.spring.beans.collections.NewPerson">
            <property name="name" value="rose"></property>
            <property name="age" value="28"></property>
            <property name="cars" ref="car5"></property>
        </bean>

    通过p命名空间为bean属性赋值

    通过p命名空间为bean的属性赋值 ,需要先导入p命名空间,相对于传统的配置方式更简洁。

    首先导入p命名空间

    配置bean:

    <!-- 通过p命名空间为bean的属性赋值 ,需要先导入p命名空间-->
        <bean id="person5" class="com.spring.beans.collections.Person"
    p:age="30" p:name="张三丰" p:cars-ref="cars" ></bean>

    注意:

    1,为普通属性赋值的写法:p:属性名=“值”;

    2,赋值的属性需要通过引用其他bean的,比如上面的p:cars-ref,这种引用其他bean的,写法是:赋值的属性-ref

    ---恢复内容结束---

  • 相关阅读:
    Matlab中fsolve传递系数变量
    MongoDB安装与启动
    Java Runnable与Callable区别
    Java创建线程的两种方式
    VC++记录
    spring-boot-mybatis
    spring-boot-mongodb
    SpringBoot helloworld
    mysql进行时
    java多线程对CountDownLatch的使用实例
  • 原文地址:https://www.cnblogs.com/alsf/p/7860263.html
Copyright © 2020-2023  润新知