程序员社区

【Spring学习及总结07】如何为bean的各种类型属性赋值

文章目录

      • 1.测试使用null值
      • 2.为引用类型属性赋值
      • 3.为List集合类型属性赋值
      • 4.为Map集合类型属性赋值
      • 5.为Properties类型属性赋值
      • 6.利用util命名空间创建集合类型的bean
      • 7.为级联属性赋值
  1. 为bean的属性赋值,即为依赖注入

  2. 依赖关系的管理:以后都交给Spring来维护
    在当前类需要用到其他类的对象,由Spring为我们提供,我们只需要在配置文件中说明依赖关系的维护,就称为依赖注入。

  3. 但是属性有可能为各种类型的,大概可以分为以下几种类型:
    1.基本类型和String类型
    2.引用类型,这里指在配置文件中配置过的bean
    3.复杂类型/集合类型

首先写一个Person实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String lastName;
    private int age;
    private String gender;
    private String email;
    
    private Car car;
    private List<Book> books;
    private Map<String,Object> map;
    private Properties properties;
}

Person实体类中的引用类Car:

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Car {
    private String name;
    private int price;
    private String color;
}

Person实体类中的引用类Book:

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Book {
    private String bookName;
    private String authorName;
}

1.测试使用null值

对于引用类型,如果没有为属性赋值,默认为null

<!--测试使用null,引用类型默认为null,基本类型默认为默认值-->
    <bean id="person01" class="com.hh.pojo.Person">
    </bean>

在这里插入图片描述

2.为引用类型属性赋值

引用配置文件中配置过的bean对象,通过ref标签

<!--引用外部bean-->
<bean id="car01" class="com.hh.pojo.Car">
    <!--value里面只能写字符串-->
    <property name="name" value="宝马"/>
    <property name="color" value="黑色"/>
    <property name="price" value="100000"/>
</bean>
<bean id="person02" class="com.hh.pojo.Person">
    <!--ref:代表引用外面的一个值-->
    <property name="car" ref="car01"/>
</bean>

测试类:

@Test
public void test(){
    Person person = (Person)context.getBean("person02");
    System.out.println(person);
    System.out.println(person.getCar());

    //通过Person类中的get方法获取car对象
    Car car = person.getCar();
    //通过Spring的配置文件得到ioc容器对象
    Object bean2 = context.getBean("car01");
    System.out.println(car==bean2);//true
}

在这里插入图片描述
在property标签内,引用外部对象

<!--引用内部bean-->
<bean id="person03" class="com.hh.pojo.Person">
    <property name="car">
    <!--对象可以使用bean标签创建-->
        <bean class="com.hh.pojo.Car">
            <property name="carName" value="自行车"/>
        </bean>
    </property>
</bean>

在这里插入图片描述

3.为List集合类型属性赋值

<!--配置Book对象-->
<bean id="book01" class="com.hh.pojo.Book">
   <property name="bookName" value="红楼梦"/>
   <property name="authorName" value="曹雪芹"/>
</bean>
<!--为List类型属性赋值-->
<bean id="person04" class="com.hh.pojo.Person">
   <property name="books">
       <!--相当于books = new ArrayList()-->
       <list>
           <!--引用内部的book对象-->
           <bean class="com.hh.pojo.Book">
               <property name="bookName" value="西游记"/>
               <property name="authorName" value="罗贯中"/>
           </bean>
           <!--引用外部的book对象-->
           <ref bean="book01"/>
       </list>
   </property>
</bean>

在这里插入图片描述

4.为Map集合类型属性赋值

<!--配置book对象-->
<bean id="book02" class="com.hh.pojo.Book">
   <property name="bookName" value="红楼梦"/>
</bean>
<!--为Map集合属性类型赋值-->
<bean id="person05" class="com.hh.pojo.Person">
   <property name="map">
       <!--相当于map = new HashMap()-->
       <map>
           <!--一个entry代表一个键值对-->
           <entry key="key01" value="张三"/>
           <entry key="key02" value="李四"/>
           <!--引用外部的bean对象-->
           <entry key="key03" value-ref="book02"/>
           <!--引用内部的bean对象-->
           <entry key="key04">
               <bean class="com.hh.pojo.Car">
                   <property name="carName" value="宝马"/>
               </bean>
           </entry>
       </map>
   </property>
</bean>

在这里插入图片描述

5.为Properties类型属性赋值

<bean id="perxon06" class="com.hh.pojo.Person">
    <property name="properties">
        <!--相当于properties = new Properties()-->
        <props>
            <prop key="username">root</prop>
            <prop key="password">123</prop>
        </props>
    </property>
</bean>

在这里插入图片描述

6.利用util命名空间创建集合类型的bean

首先引入util命名空间

<?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:util="http://www.springframework.org/schema/util"
       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命名空间创建集合类型的bean

<!--利用util命名空间创建集合类型的bean;方便别人引用-->
<!--相当于map=new LikedHashMap()-->
<util:map id="myMap">
    <!--添加元素-->
    <entry key="key01" value="张三"/>
    <entry key="key02" value="李四"/>
    <!--引用外部的bean对象-->
    <entry key="key03" value-ref="book02"/>
    <!--引用内部的bean对象-->
    <entry key="key04">
        <bean class="com.hh.pojo.Car">
            <property name="carName" value="宝马"/>
        </bean>
    </entry>
</util:map>
<bean id="person07" class="com.hh.pojo.Person">
    <property name="map" ref="myMap"/>
</bean>

在这里插入图片描述

7.为级联属性赋值

<bean id="car02" class="com.hh.pojo.Car">
    <!--value里面只能写字符串-->
    <property name="carName" value="宝马"/>
    <property name="color" value="黑色"/>
    <property name="price" value="100000"/>
</bean>
<!--级联属性赋值-->
<bean id="person08" class="com.hh.pojo.Person">
    <!--为car赋值时,改变car的价格-->
    <property name="car" ref="car02"/>
    <property name="car.price" value="90000"/>
</bean>

测试类:

@Test
    public void test7(){
        Person person = (Person)context.getBean("person08");
        Car car = context.getBean("car02",Car.class);
        System.out.println(car);
        System.out.println(person.getCar());
    }

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Spring学习及总结07】如何为bean的各种类型属性赋值

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区