(3)Spring - 属性配置细节,属性介绍

1、注入属性值的细节

我们在value中"" 这样写是报错的。
在X文档里面<>是特殊标记
如图所示:
在这里插入图片描述

解决问题:若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来。
修改过后图示:
在这里插入图片描述
结果显示:
在这里插入图片描述

2、引用其他的Bean

组成应用程序的 Bean 经常需要相互协作以完成应用程序的功能. 要使 Bean 能够相互访问, 就必须在 Bean 配置文件中指定对 Bean 的引用
1、引用其他的Bean的方法
1.在 Bean 的配置文件中, 可以通过 <ref> 元素或 ref 属性为 Bean 的属性或构造器参数指定对 Bean 的引用.
2.也可以在属性或构造器里包含 Bean 的声明, 这样的 Bean 称为内部 Bean

2、(方法1)在 Bean 的配置文件中, 可以通过 元素或 ref 属性为 Bean 的属性或构造器参数指定对 Bean 的引用.

2.1、首先来写一个类Person(get,set方法,和toString()方法)

public class Person {

    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", car=" + car +
                '}';
    }

    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;
    }
}

2.2可以使用property的ref属性建立bean之间的引用关系!在这里插入图片描述
2.3、获取到的值为:
在这里插入图片描述

2.4、也可以使用内部Bean,跟上面等同
在这里插入图片描述
注意:内部Bean不能被外部引用,只能在内部使用

2.5、我们在引用其他bean的时候用构造器是不是一样的? 是不是也是用这样的方式来写< constructor - arg >
我们来举一个例子:
我们在Person类中(加入无参,有参的构造器)
注意:在有无参数的构造器中,创建Bean使用< constructor - arg >
在这里插入图片描述
在xml文件中写入:
在这里插入图片描述
Main里面写入:
在这里插入图片描述
结果显示:
在这里插入图片描述

3、注入参数详解:null 值和级联属性

可以使用专用的 元素标签为 Bean 的字符串或其它对象类型的属性注入 null 值
和 Struts、Hiberante 等框架一样,Spring 支持级联属性的配置。

3.1、null值操作
我们在Person里面给Car类赋值一个null值
注意写法:< constructor-arg >< null/ >< /constructor-arg >
xml文件中:
在这里插入图片描述

输出结果:
在这里插入图片描述

3.2、级联属性
首先在Car类里面加入set方法:
在这里插入图片描述
xml文件中写入:

在这里插入图片描述
结果显示:
在这里插入图片描述
上述步骤为:先给Person里面的 car赋值,然后再给car里面maxSpeed赋值,就叫做级联属性

3.2.1 问题::上述步骤为:先给Person里面的 car赋值,然后再给car里面maxSpeed赋值,如果我先不给car赋值,那这个时候它会自动的创建car属性,然后在给级联属性赋上吗?
首先car是空的,然后我们给car里面的maxSpeed赋值试一试结果
在这里插入图片描述
结果显示报错!!!!
在这里插入图片描述
所以在级联属性赋值的时候,我们有一个要注意的地方:
属性需要先初始化后才可以为级联属性赋值,否则会有异常

4、集合属性

-1、在 Spring中可以通过一组内置的 xml 标签(例如: , 或 ) 来配置集合属性.
-2、配置 java.util.List 类型的属性, 需要指定 标签, 在标签里包含一些元素. 这些标签可以通过 指定简单的常量值, 通过 指定对其他 Bean 的引用. 通过 指定内置 Bean 定义. 通过 指定空元素. 甚至可以内嵌其他集合.
-3、数组的定义和 List 一样, 都使用
-4、配置 java.util.Set 需要使用 标签, 定义元素的方法与 List 一样.

在Person类里面我们可以包含几辆车,那么我们如何来写呢?
==4.1、集合属性之List
我们创建一个和beans等级的包,名为collections
把Person类里面的内容修改(加入list):

public class Person {

    private String name;
    private int age;
    private List<Car> cars;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cars=" + 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;
    }


}

xml文件中:
在这里插入图片描述

结果显示:
在这里插入图片描述

4.2、集合属性之Map:

-1、Java.util.Map 通过 <map> 标签定义, 标签里可以使用多个 <entry> 作为子标签. 每个条目包含一个键和一个值.
-2、必须在 <key>标签里定义键
-3、因为键和值的类型没有限制, 所以可以自由地为它们指定<value>, <ref>, <bean> 或 <null>元素.
-4、可以将 Map 的键和值作为 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-refvalue-ref 属性定义
-5、使用 <props> 定义 java.util.Properties, 该标签使用多个 作为子标签. 每个 <prop> 标签必须定义 key 属性.

4.2.1、测试Map步骤如下:
在collections包下新建一个newPerson类:

public class newPerson {
    private String name;
    private int age;
    private Map<String,Car> cars;

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "newPerson{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cars=" + cars +
                '}';
    }

    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;
    }
}

xml写入:

在这里插入图片描述
Main中写入:
在这里插入图片描述
结果显示:
在这里插入图片描述
4.3、集合属性之props:
我们在连接数据库的时候需要用户名,密码,jdbcurl,driver
我们来做一个数据库模拟测试。

步骤如下:
在collections下创建一个类,名:DataSource

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 +
                '}';
    }
}

xml文件中:
在这里插入图片描述
Main中:
在这里插入图片描述
结果显示 :
在这里插入图片描述

5、使用 utility scheme 定义集合

使用基本的集合标签定义集合时, 不能将集合作为独立的 Bean 定义, 导致其他 Bean 无法引用该集合, 所以无法在不同 Bean 之间共享集合.
可以使用 util schema 里的集合标签定义独立的集合 Bean. 需要注意的是, 必须在 根元素里添加 util schema 定义

步骤如下:
在xml文件中:
在这里插入图片描述
Main中:
在这里插入图片描述
结果显示:
在这里插入图片描述

6、使用 p 命名空间

-1、为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。
-2、Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 < bean> 元素属性的方式配置 Bean 的属性。
-3、使用 p 命名空间后,基于 XML 的配置方式将进一步简化

步骤如下:

xml文件中:
在这里插入图片描述
Main中:
在这里插入图片描述
结果显示:
在这里插入图片描述

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值