Spring4---属性配置细节

  • java类中的属性类型可分为基本数据类型:int.double,引用数据类型:String.还有基本数据类型的封装:Integer,Double等等.还有自定义的类型.
  • Spring在为类属性赋值的时候,可以有不同的方式

在这里插入图片描述

<bean id="person2" class="mao.shu.spring.Person">
    <!--通过value属性赋值-->
    <constructor-arg name="id" value="789" type="java.lang.Integer"/>
    <!--包含特殊字符,使用<![CDATA[]]>-->
    <constructor-arg name="name"  type="java.lang.String">
        <value><![CDATA[<xiemaoshu>]]]></value>
    </constructor-arg>
    <!--使用value标签赋值-->
    <constructor-arg name="balance"  type="double">
        <value>500.5</value>
    </constructor-arg>
</bean>
  • 测试结果

在这里插入图片描述

引用其他Bean

在这里插入图片描述

  • 示例:现在有两个java程序类

    1. Person类:包含name,age,pNumber三个基本类型属性,还有一个student属性,该属性类型是自定义的java程序类
    2. Student类:包含school,specialty两个基本类型属性
  • Person类


public class Person {
    //类成员
    private Integer id;
    private String name;
    private Integer age;
    private double balance;
    
    private Student student;
    //getter和setter方法
    //toString方法
}
  • Student类
public class Student {
    private String school;
    private String specialty;
    //getter和setter方法
    //toString()方法
}
  • 在Spring配置文件中配置
<bean id="student1" class="mao.shu.spring.Student">
    <property name="school" value="风中"/>
    <property name="specialty" value="吃饭"/>
</bean>

<bean id="person3" class="mao.shu.spring.Person">
    <property name="id" value="9527"/>
    <property name="name" value="9527-xiemaoshu"/>
    <property name="age" value="22"/>
    <property name="balance" value="789456.25"/>
    <property name="student" ref="student1"/>
</bean>
  • 测试获取"person3"实例化对象
public class Begin {
    public static void main(String[]args){
        ApplicationContext app = new ClassPathXmlApplicationContext("spring-config.xml");
		Person person3 = (Person) app.getBean("person3");
        System.out.println(person3);
 }

在这里插入图片描述

  • 如果使用构造器的方式配置
   <bean id="person2" class="mao.shu.spring.Person">
        <!--通过value属性赋值-->
        <constructor-arg name="id" value="789" type="java.lang.Integer"/>
        <!--包含特殊字符,使用<![CDATA[]]>-->
        <constructor-arg name="name"  type="java.lang.String">
            <value><![CDATA[<xiemaoshu>]]]></value>
        </constructor-arg>
        <constructor-arg name="age" value="22"/>
        <!--使用value标签赋值-->
        <constructor-arg name="balance"  type="double">
            <value>500.5</value>
        </constructor-arg>
        
        <!--通过构造器注入引用bean属性-->
        <constructor-arg name="student" ref="student1"></constructor-arg>
    </bean>

    <bean id="student1" class="mao.shu.spring.Student">
        <property name="school" value="风中"/>
        <property name="specialty" value="吃饭"/>
    </bean>

内部Bean

在这里插入图片描述

  • 示例内部bean的配置方式
<bean id="person4" class="mao.shu.spring.Person">
    <property name="id" value="9527"/>
    <property name="name" value="9527-xiemaoshu"/>
    <property name="age" value="22"/>
    <property name="balance" value="789456.25"/>
    <property name="student">
        <!--由于内部bean无法被其他外部bean所使用,因此不需要设置id属性-->
      <bean class="mao.shu.spring.Student">
          <property name="school" value="内部bean测试"/>
          <property name="specialty" value="测试"/>
      </bean>
    </property>
</bean>

null 值和级联属性

在这里插入图片描述

  • 级联属性指的是关联Bean中的成员变量,例如:Person中有一个关联的Bean:Student类属性引用,Student类中的"school"成员变量和"specialty"成员变量,他们就是Person类的级联属性

  • 需要注意的是:如果要为级联属性赋值,那么急脸熟性必须先初始化

private Student student = new Student();
  • 如果级联属性没有先初始化则会出现以下错误

在这里插入图片描述

  • 示例:为bean设置null值
<bean id="person3" class="mao.shu.spring.Person">
    <property name="id" value="9527"/>
    <property name="name" value="9527-xiemaoshu"/>
    <property name="age" value="22"/>
    <property name="balance" value="789456.25"/>
    <property name="student">
       <null/>
    </property>
</bean>

在这里插入图片描述

  • 为关联属性赋值
<bean id="person3" class="mao.shu.spring.Person">
    <property name="id" value="9527"/>
    <property name="name" value="9527-xiemaoshu"/>
    <property name="age" value="22"/>
    <property name="balance" value="789456.25"/>
    
    <!--为关联属性赋值-->
    <property name="student.school" value="关联属性赋值测试"/>
    <property name="student.specialty" value="关联属性"/>
</bean>

集合属性

在这里插入图片描述

  • 示例:为Persson类中添加一个List集合属性,并设置getter和setter方法
//    集合属性
    private List<Friend> friends;
    
    public List<Friend> getFriends() {
        return friends;
    }

    public void setFriends(List<Friend> friends) {
        this.friends = friends;
    }
  • Friends类
public class Friend {
    private String name;
    private Integer age;
//getter和setter方法
//构造方法
//toString方法
}
  • 设置Spring配置文件
<bean id="person5" class="mao.shu.spring.Person">
    <property name="id" value="141999"/>
    <property name="name" value="141999-xiemaoshu"/>
    <property name="age" value="22"/>
    <property name="balance" value="789456.25"/>
    <property name="student">
        <!--由于内部bean无法被其他外部bean所使用,因此不需要设置id属性-->
        <bean class="mao.shu.spring.Student">
            <property name="school" value="内部bean测试"/>
            <property name="specialty" value="测试"/>
        </bean>
    </property>

    <!--配置List集合-->
    <property name="friends">
        <list>
           <ref bean="friend1"/>
           <ref bean="friend2"/>
        </list>
    </property>
</bean>

<bean id="friend1" class="mao.shu.spring.Friend">
    <constructor-arg name="name" value="Lanchaogou"></constructor-arg>
    <constructor-arg name="age" value="23"></constructor-arg>
</bean>

<bean id="friend2" class="mao.shu.spring.Friend">
    <constructor-arg name="name" value="windows10"></constructor-arg>
    <constructor-arg name="age" value="2"></constructor-arg>
</bean>
  • 测试
public class Begin {
    public static void main(String[]args){
        ApplicationContext app = new ClassPathXmlApplicationContext("spring-config.xml");
		Person person5 = (Person) app.getBean("person5");
        System.out.println(person5);
    }
}
  • 运行结果
    在这里插入图片描述

注入Map集合属性

在这里插入图片描述

  • 示例:在Person中添加Map集合属性
private Map<String,Object> outher;
  • 配置Spring文件
<bean id="person6" class="mao.shu.spring.Person">
    <constructor-arg name="id" value="9527" index="0"/>
    <constructor-arg name="name" value="xiemaoshu" index="1"/>
    <constructor-arg name="age" value="22" index="2"/>
    <!--配置map集合-->
    <property name="outher">
        <map key-type="java.lang.String" value-type="java.lang.Object">
            <entry key="firend1" value-ref="friend1"/>
            <entry key="firend2" value-ref="friend2"/>
        </map>
    </property>
</bean>
  • 测试
public class Begin {
    public static void main(String[]args){
        ApplicationContext app =
                new ClassPathXmlApplicationContext("spring-config.xml");
        Person person6 = (Person) app.getBean("person6");
        System.out.println(person6.getOuther());

    }
}

在这里插入图片描述

使用util:list 命名空间(scheme)定义集合

在这里插入图片描述

  • 示例:
<!--定义List<Friend> 集合-->
 <util:list id="firends">
     <ref bean="friend1"/>
     <ref bean="friend2"/>
 </util:list>
 
 <!--定义List<Person> 集合-->
 <util:list id="persons">
     <ref bean="person1"/>
     <ref bean="person2"/>
     <ref bean="person3"/>
     <ref bean="person4"/>
     <ref bean="person5"/>
     <ref bean="person6"/>
 </util:list>
  • 其他的Bean要使用集合只需使用id即可
 <bean id="person6" class="mao.shu.spring.Person">
     <constructor-arg name="id" value="9527" index="0"/>
     <constructor-arg name="name" value="xiemaoshu" index="1"/>
     <constructor-arg name="age" value="22" index="2"/>
     <!--配置map集合-->
     <property name="outher">
         <map key-type="java.lang.String" value-type="java.lang.Object">
             <!--引用List集合-->
             <entry key="friends" value-ref="firends"/>
             <entry key="persons" value-ref="persons"/>
         </map>
     </property>
 </bean>
  • 测试
public class Begin {
    public static void main(String[]args){
        ApplicationContext app =
                new ClassPathXmlApplicationContext("spring-config.xml");
        Person person6 = (Person) app.getBean("person6");
        System.out.println(person6.getOuther());

    }
}
  • 得到的结果
    在这里插入图片描述

使用P命名空间

在这里插入图片描述

  • 示例:
<!--使用p命名空间-->
<bean id="person7" class="mao.shu.spring.Person" p:id="123" p:name="p命名空间测试" p:balance="500"> 
</bean>
  • 测试
public class Begin {
    public static void main(String[]args){
        ApplicationContext app =
                new ClassPathXmlApplicationContext("spring-config.xml");

        Person person7 = (Person) app.getBean("person7");

        System.out.println(person7.getId());
        System.out.println(person7.getName());
        System.out.println(person7.getBalance());

    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43386754/article/details/88056776