5 - spring对象的获取及属性赋值方式 - 2

spring对象的获取及属性赋值方式:

4、通过命名空间为bean赋值,简化配置文件中属性声明的写法

5、为复杂类型进行赋值操作

见代码。

6、继承关系bean的配置

7、bean对象创建的依赖关系

代码示例:

Person类:

package com.zhoulz.bean;

import java.util.*;

/**
 * @Auther: zhoulz
 * @Description: com.zhoulz.bean
 * @version: 1.0
 */
public class Person {
    private int id;
    private String name;
    private Integer age;
    private String gender;

    //复杂类型
    private String[] hobbies;
    private Address address;

    //private List<String> lists;
    private List<Address> lists;
    private Set<String> sets;
    private Map<String,Object> maps;
    private Properties properties;


    public Person() {
        System.out.println("person被创建了!");
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String[] getHobbies() {
        return hobbies;
    }

    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List<Address> getLists() {
        return lists;
    }

    public void setLists(List<Address> lists) {
        this.lists = lists;
    }

    public Set<String> getSets() {
        return sets;
    }

    public void setSets(Set<String> sets) {
        this.sets = sets;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", hobbies=" + Arrays.toString(hobbies) +
                ", address=" + address +
                ", lists=" + lists +
                ", sets=" + sets +
                ", maps=" + maps +
                ", properties=" + properties +
                '}';
    }
}

Address类:

package com.zhoulz.bean;

/**
 * @Auther: zhoulz
 * @Description: com.zhoulz.bean
 * @version: 1.0
 */
public class Address {
    private String province;
    private String city;
    private String town;

    public Address() {
        System.out.println("Address被创建了");
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getTown() {
        return town;
    }

    public void setTown(String town) {
        this.town = town;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                ", town='" + town + '\'' +
                '}';
    }
}

测试类:

import com.zhoulz.bean.Address;
import com.zhoulz.bean.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Auther: zhoulz
 * @Description: PACKAGE_NAME
 * @version: 1.0
 */
public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml");

        /*Person person = context.getBean("person", Person.class);
        System.out.println(person);*/

        /*Person person2 = context.getBean("person2", Person.class);
        System.out.println(person2);*/

        /*Person person3 = context.getBean("person3", Person.class);
        System.out.println(person3);//hobbies=[book, girl, movies]*/

        /*Address address2 = context.getBean("address2", Address.class);
        System.out.println(address2);//内部bean——不可以直接获取 */

        //bean之间的继承关系
        Person son = context.getBean("son", Person.class);
        System.out.println(son);

        Person parent = context.getBean("parent", Person.class);
        System.out.println(parent);
    }
}

ioc.xml配置文件:

<?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:p="http://www.springframework.org/schema/p"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person" class="com.zhoulz.bean.Person" > <!--单例-->
        <property name="id" value="1"></property>
        <property name="name" value="lisi"></property>
        <property name="age" value="20"></property>
        <property name="gender" value="男"></property>
    </bean>

    <!--需要在上面加上:xmlns:p="http://www.springframework.org/schema/p",
    使用p命名空间来给属性赋值:-->
    <bean id="person2" class="com.zhoulz.bean.Person"
    p:id="2"
    p:name="wangwu"
    p:age="30"
    p:gender="男">
    </bean>

    <!--给复杂类型进行赋值操作-->
    <bean id="person3" class="com.zhoulz.bean.Person" > <!--单例-->
        <property name="id" value="3"></property>
        <property name="name" value="wangwuu3"></property>
        <property name="age" value="33"></property>
        <property name="gender" value="男"></property>
        <!--给数组赋值,使用array标签(用的更多)-->
        <!--<property name="hobbies" value="book,girl,movies"></property>-->
        <!--换个友好的方式-->
        <property name="hobbies">
            <array>
                <value>book</value>
                <value>girl</value>
                <value>movies</value>
            </array>
        </property>

        <!--给引用类似赋值(先在这个bean外面重新写一个id为address的bean))-->
        <!--然后使用ref引入外部bean:-->
        <property name="address" ref="address"></property>

        <!--给list赋值-->
        <!--<property name="lists" value="1,2,3"></property>-->
        <!--换个方式(把里面的String换成了Address)-->
        <property name="lists">
            <list>
                <!--使用内部bean,此时,无法从IOC容器直接获取对象的值-->
                <bean id="address2" class="com.zhoulz.bean.Address">
                    <property name="province" value="北京"></property>
                    <!--后面可写全-->
                    <property name="town" value="海淀"></property>
                </bean>
                <bean class="com.zhoulz.bean.Address">
                    <property name="province" value="上海"></property>
                </bean>
                <!--还可以-使用外部bean,此时,可以随意从IOC容器获取对象的值-->
                <ref bean="address"></ref>
            </list>
        </property>

        <!--给set属性赋值-->
        <property name="sets">
            <set>
                <value>zhangsan</value>
                <value>zhangsan</value> <!--设置一个重复的—— 则获取的时候只有一个值,因为Set自己具备的唯一特性-->
                <value>lisi</value>   <!--获取的结果为:sets=[zhangsan, lisi] -->
            </set>
        </property>

        <!--给map赋值-->
        <property name="maps">
            <map> <!--下面为3种不同的写法-->
                <entry key="a" value="aaa"></entry>
                <entry key="address" value-ref="address"></entry>
                <entry key="address2">
                    <bean class="com.zhoulz.bean.Address">
                        <property name="province" value="广东"></property>
                    </bean>
                </entry>
                <!--还有Object类型,所以还可以:-->
                <entry>
                    <key>
                        <value>heiehi</value>
                    </key>
                    <!--不能直接这样写:不然,运行时会报“元素"key"必须不包含子集[key]”,因为该类型的内容类型为"仅元素"”的错误-->
                    <!--<key>heihei<key>-->
                    <value>haha</value>
                </entry>
                <!--写法同上,试试list-->
                <entry key="list">
                    <list>
                        <value>11</value>
                        <value>22</value>
                    </list>
                </entry>
            </map>
        </property>

        <!--给properties赋值-->
        <property name="properties">
            <props>
                <prop key="111">aaa</prop>
                <prop key="222">bbb</prop>
            </props>
        </property>

    </bean>

    <!--(见上面)给引用类似赋值,需要先在上面的bean外面提前写一个id为address的bean))-->
    <bean id="address" class="com.zhoulz.bean.Address">
        <property name="province" value="安徽省"></property>
        <property name="city" value="芜湖"></property>
        <property name="town" value="无为"></property>
    </bean>

    <!--bean之间的继承关系-->
    <!--可以使用abstract标签定义抽象bean,无法进行实例化-->
    <bean id="parent" class="com.zhoulz.bean.Person" abstract="false">
        <property name="id" value="1"></property>
        <property name="name" value="lisi"></property>
        <property name="age" value="20"></property>
        <property name="gender" value="男"></property>
    </bean>
    <!--可以通过parent属性来获取父bean中的某些属性值-->
    <bean id="son" class="com.zhoulz.bean.Person" parent="parent">
        <property name="name" value="haha"></property>
    </bean>

    <!--创建bean的时候依赖关系-->
    <!--当bean对象被创建的时候,是按配置文件定义的顺序创建的,谁在前,谁就被先被创建
    如果需要干扰创建的顺序,可以使用depends-on
    一般在实际的工作中,不必在意bean创建的顺序,无论谁先创建,需要依赖的对象在创建完成之后都会进行赋值操作-->
    <!--<bean id="address" class="com.zhoulz.bean.Address" depends-on="person"></bean>
    <bean id="person" class="com.zhoulz.bean.Person"></bean>-->
    <!--结果:person在前-->

</beans>

上面,给properties赋值的方式:其实就是key-value的键值对象

写法类似于:

在resources下创建一个db.properties的配置文件:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值