Spring的依赖注入和Spring Bean的配置及常用属性
发布日期:2021-04-30 21:03:37 浏览次数:101 分类:精选文章

本文共 4695 字,大约阅读时间需要 15 分钟。

Spring 依赖注入(DI)实现方式及Bean配置详解

随着软件开发的复杂化,传统的编程习惯已经无法满足现代应用需求。传统方法中,对象的创建和依赖管理由开发者手动完成,这不仅导致代码耦合性高,还难以维护和扩展。在此背景下,Spring引入了控制反转(IoC)依赖注入(DI),彻底改变了传统的编程模式,实现了对对象创建和依赖管理的自动化,极大地提升了开发效率。

本文将从基础到高级内容详细介绍Spring的依赖注入实现方式及其相关配置,帮助开发者深入理解Spring的核心机制。


一、Spring 依赖注入(DI)的实现方式

依赖注入(Dependency Injection,DI)是Spring中实现控制反转的一种重要方式,其核心思想是通过容器自动注入对象的依赖关系,使得对象的创建和管理不再由使用者手动完成。

1. 属性 setter 注入

属性 setter 注入是Spring最常见的依赖注入方式。通过调用对象的 setter 方法,将依赖对象注入到目标对象中。

实现步骤:

  • 创建项目,完善结构,导入依赖

    • 确保项目中已导入Spring的相关依赖包。例如:
      org.springframework
      spring-context
      5.1.5.RELEASE
  • 创建被调用者类

    • 定义一个需要注入依赖的目标对象(被调用者类)。
    • 示例:
      package com.example;public class Person {    public void testPerson() {        System.out.println("Person类的实例方法testPerson()");    }}
  • 创建调用者类

    • 定义一个需要依赖被调用者类实例的对象(调用者类)。
    • 示例:
      package com.example;public class Student {    private Person person;    public void setPerson(Person person) {        this.person = person;        System.out.println("Student类中setPerson方法执行了,进行依赖注入");    }    public void getStudent() {        System.out.println("Student类的实例方法getStudent()");        person.testPerson();    }}
  • 配置Spring配置文件

    • 在Spring的配置文件中定义目标对象,并通过 setter 方法注入依赖。
    • 示例:
  • 创建测试类

    • 编写单元测试类,验证依赖注入是否正常。
    • 示例:
      package com.example;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestMain {    @Test    public void test1() {        String path = "applicationContext.xml";        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(path);        Person person = applicationContext.getBean("person", Person.class);        Student student = applicationContext.getBean("student", Student.class);        person.testPerson();        student.getStudent();    }}
  • 2. 构造方法注入

    构造方法注入是一种基于构造器参数的依赖注入方式,适用于目标对象需要多个依赖参数的情况。

    实现步骤:

  • 创建项目,完善结构,导入依赖

    • 与属性 setter 注入一样,确保项目中已导入Spring的相关依赖包。
  • 创建被调用者类

    • 定义一个需要通过构造方法注入依赖的目标对象(被调用者类)。
    • 示例:
      package com.example;public class Person {    public void testPerson() {        System.out.println("Person类的实例方法testPerson()");    }}
  • 创建调用者类

    • 定义一个需要依赖被调用者类实例的对象(调用者类),并定义有参数的构造方法。
    • 示例:
      package com.example;public class Student {    private Person person;    public Student(int stuId, String stuName, Person person) {        this.stuId = stuId;        this.stuName = stuName;        this.person = person;        System.out.println("student的有参构造--在spring的配置文件中若是指定以有参构造注入,那么无参构造不会执行");    }    public Student() {        System.out.println("student的无参构造");    }    public void getStudent() {        System.out.println("Student类的实例方法getStudent()");        person.testPerson();    }}
  • 配置Spring配置文件

    • 在Spring的配置文件中定义目标对象,并通过构造方法注入依赖。
    • 示例:
  • 创建测试类

    • 编写单元测试类,验证构造方法注入是否正常。
    • 示例:
      package com.example;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestMain {    @Test    public void test1() {        String path = "applicationContext.xml";        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(path);        Student student = applicationContext.getBean("student", Student.class);        student.getStudent();    }}

  • 二、Spring Bean的配置及常用属性

    在Spring中,Bean的配置是实现依赖注入的核心机制。通过配置文件定义Bean的创建和注入方式,使得容器能够自动管理对象的生命周期和依赖关系。

    1. Bean的基本配置

    • id:Bean的唯一标识符。
    • name:Bean在容器中的显示名称,可以有多个名称。
    • class:Bean的实现类。
    • scope:Bean的作用域,包括singleton(单例)、prototype(原型)等。
    • init-method:初始化Bean的方法。
    • destroy-method:销毁Bean的方法。

    2. Bean的作用域

    Spring支持五种Bean的作用域:

    • singleton:默认作用域,容器中只保留一个Bean实例。
    • prototype:每次获取Bean时,容器创建一个新的实例。
    • request:在一次HTTP请求中,容器返回同一个Bean实例。
    • session:在一次HTTP会话中,容器返回同一个Bean实例。
    • global session:在全局HTTP会话中,容器返回同一个Bean实例。

    单例Bean的生命周期

    • Bean被容器创建后,经过初始化后进入待用状态。
    • 在容器关闭时,Bean会被销毁,调用destroy-methodDisposableBean.destroy()

    原型Bean的生命周期

    • 每次获取Bean时,容器创建一个新的实例。
    • Bean的生命周期由调用者管理,Spring容器不再跟踪。

    三、Spring Bean的实例化方式

    Spring提供三种实例化Bean的方式:

  • 构造器实例化:通过无参数构造函数创建Bean。
  • 静态工厂实例化:通过工厂类的静态方法创建Bean。
  • 实例工厂实例化:通过工厂类的成员方法创建Bean。
  • 1. 构造器实例化

    • Bean由容器通过构造函数创建,适用于简单的无参数Bean。
    • 配置方式:

    2. 静态工厂实例化

    • Bean由工厂类的静态方法创建。
    • 配置方式:

    3. 实例工厂实例化

    • Bean由工厂类的成员方法创建。
    • 配置方式:

    四、Spring中的Bean作用域详解

    1. 单例作用域

    • 默认作用域,容器中只保留一个Bean实例。
    • 示例:

    2. 原型作用域

    • 每次获取Bean时,容器创建一个新的实例。
    • 示例:

    五、Spring Bean的生命周期

    Bean的生命周期由Spring容器管理,主要包括以下阶段:

  • 创建阶段:通过构造器或工厂方法创建Bean实例。
  • 初始化阶段:初始化Bean的属性和依赖。
  • 使用阶段:Bean被应用程序使用。
  • 销毁阶段:Bean被销毁,释放资源。
  • 通过init-methoddestroy-method属性,可以自定义Bean的初始化和销毁逻辑。


    六、总结

    通过本文的详细介绍,可以看出Spring依赖注入(DI)是一种强大的工具,能够显著提升应用程序的可维护性和扩展性。无论是通过属性 setter注入还是构造方法注入,Spring都能自动管理对象的创建和依赖关系,减少开发者的手动干预。同时,Spring的Bean配置和作用域设置为开发者提供了更高的灵活性和控制权,能够根据具体需求选择最合适的配置方式。

    通过合理使用Spring的功能,可以快速构建高质量的应用程序,实现对对象生命周期的精细管理,从而提升开发效率和用户体验。

    上一篇:剑指offer打卡Day12:数组中重复的数字
    下一篇:JavaBase-IO流-标准输入,输出流、打印流、数据流

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2026年06月11日 17时36分43秒