spring笔记-02依赖注入

依赖注入(Dependency Injection,DI)。

  • 构造函数注入
    我们可以通过 Bean 的带参构造函数,以实现 Bean 的属性注入。使用构造函数实现属性注入大致步骤如下:
    在 Bean 中添加一个有参构造函数,构造函数内的每一个参数代表一个需要注入的属性;
    在 Spring 的 XML 配置文件中,通过 及其子元素 对 Bean 进行定义;
    元素内使用 元素,对构造函数内的属性进行赋值,Bean 的构造函数内有多少参数,就需要使用多少个 元素。

  • Set 注入 (重点), setter 注入(又称设值注入)
    要求被注入的属性 , 必须有set方法 , set方法的方法名由set + 属性首字母大写 , 如果属性是boolean类型 , 没有set方法 , 是 is.
    在 Spring 实例化 Bean 的过程中,IoC 容器首先实例化 Bean(Java 对象),然后通过 Java 的反射机制调用这个 Bean 的 setXxx() 方法,将属性值注入到 Bean 中。
    使用 setter 注入的方式进行属性注入,大致步骤如下:
    在 Bean 中提供一个默认的无参构造函数(在没有其他带参构造函数的情况下,可省略),并为所有需要注入的属性提供一个 setXxx() 方法;
    在 Spring 的 XML 配置文件中,使用 及其子元素 对 Bean 进行定义;
    元素内使用 元素对各个属性进行赋值。

短命名空间注入

我们在通过构造函数或 setter 方法进行属性注入时,通常是在 元素中嵌套 元素来实现的。这种方式虽然结构清晰,但书写较繁琐。Spring 框架提供了 2 种短命名空间,可以简化 Spring 的 XML 配置,如下表。
p 命名空间 元素中嵌套的 元素 是 setter 方式属性注入的一种快捷实现方式
c 命名空间 元素中嵌套的 元素 是构造函数属性注入的一种快捷实现方式

p 命名空间注入

p 命名空间是 setter 方式属性注入的一种快捷实现方式。通过它,我们能够以 bean 属性的形式实现 setter 方式的属性注入,而不再使用嵌套的 元素,以实现简化 Spring 的 XML 配置的目的。

首先我们需要在配置文件的 元素中导入以下 XML 约束。
xmlns:p="http://www.springframework.org/schema/p"
在导入 XML 约束后,我们就能通过以下形式实现属性注入。
<bean id="Bean 唯一标志符" class="包名+类名" p:普通属性="普通属性值" p:对象属性-ref="对象的引用">
使用 p 命名空间注入依赖时,必须注意以下 3 点:
Java 类中必须有 setter 方法;
Java 类中必须有无参构造器(类中不包含任何带参构造函数的情况,无参构造函数默认存在);
在使用 p 命名空间实现属性注入前,XML 配置的 元素内必须先导入 p 命名空间的 XML 约束。

c 命名空间注入
c 命名空间是构造函数注入的一种快捷实现方式。通过它,我们能够以 属性的形式实现构造函数方式的属性注入,而不再使用嵌套的 元素,以实现简化 Spring 的 XML 配置的目的。

首先我们需要在配置文件的 元素中导入以下 XML 约束。
xmlns:c="http://www.springframework.org/schema/c"

在导入 XML 约束后,我们就能通过以下形式实现属性注入。
<bean id="Bean 唯一标志符" class="包名+类名" c:普通属性="普通属性值" c:对象属性-ref="对象的引用">

使用 p 命名空间注入依赖时,必须注意以下 2 点:
Java 类中必须包含对应的带参构造器;
在使用 c 命名空间实现属性注入前,XML 配置的 元素内必须先导入 c 命名空间的 XML 约束。

其它

数组注入





西游记
红楼梦


  • Map 注入





  • set 注入


    LOL
    BOB

  • Null 注入

  • Properties 注入


    20190604

    小明

p命名和c命名注入

内部 Bean

内部 Bean 都是匿名的,不需要指定 id 和 name 的。即使制定了,IoC 容器也不会将它作为区分 Bean 的标识符,随着外部的 Bean 创建。内部 Bean 是无法被注入到它所在的 Bean 以外的任何其他 Bean 的。

setter 方式注入内部 Bean

构造函数方式注入内部 Bean

我们可以通过构造方法注入内部 Bean。此时,我们只需要在 标签下的 元素中,再次使用 元素对内部 Bean 进行定义,格式如下。










posted @ 2022-02-05 02:08  wqheng6  阅读(31)  评论(0)    收藏  举报