1. 概述

Spring Bean 是 Spring 框架中的一个核心概念。要真正掌握 Spring 并高效使用它,理解 Bean 的本质是绕不开的一环。

但奇怪的是,关于“Spring Bean 到底是什么”的问题,并没有一个特别明确统一的答案。有些解释太底层,让人抓不住主线;有些又太模糊,看完还是云里雾里。

本文将从官方文档入手,带你一步步厘清这个概念。

2. Bean 的定义

Spring 官方文档 中,是这样定义 Bean 的:

在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 Bean。Bean 是由 Spring IoC 容器实例化、组装并管理的对象。

这段话简洁明了,但也忽略了一个关键点:Spring IoC 容器。我们接下来就重点聊聊它。

3. 控制反转(Inversion of Control)

简单来说,控制反转(IoC)是指一个对象不自己创建依赖,而是由外部容器来负责依赖的创建和注入

听起来有点绕?别急,我们先来看两个实体类。

3.1. 实体类定义

public class Company {
    private Address address;

    public Company(Address address) {
        this.address = address;
    }

    // getter, setter 等
}

Company 类依赖 Address:

public class Address {
    private String street;
    private int number;

    public Address(String street, int number) {
        this.street = street;
        this.number = number;
    }

    // getters and setters
}

3.2. 传统方式创建对象

一般我们这样写:

Address address = new Address("High Street", 1000);
Company company = new Company(address);

✅ 这么写当然没问题,但如果项目里有成百上千个类呢?

有时候我们需要单例,有时候需要多例,有时候还要管理生命周期……这时候,手动管理对象简直就是一场灾难

这时候 IoC 就派上用场了。

通过 IoC 容器,对象不再自己创建依赖,而是从容器中获取。我们只需要提供配置元数据即可。

3.3. Bean 的配置方式

我们先给 Company 类加上注解:

@Component
public class Company {
    // 内容同上
}

然后写一个配置类:

@Configuration
@ComponentScan(basePackageClasses = Company.class)
public class Config {
    @Bean
    public Address getAddress() {
        return new Address("High Street", 1000);
    }
}

这个配置类做了两件事:

  • 通过 @Bean 注解提供一个 Address 类型的 Bean
  • 通过 @ComponentScan 告诉容器去扫描 Company 所在包下的组件

✅ 当 Spring IoC 容器根据这些配置创建并管理对象时,这些对象就被称为 Spring Bean

3.4. IoC 容器的实际使用

我们使用 AnnotationConfigApplicationContext 来加载配置类并启动容器:

ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);

然后简单验证一下:

Company company = context.getBean("company", Company.class);
assertEquals("High Street", company.getAddress().getStreet());
assertEquals(1000, company.getAddress().getNumber());

✅ 结果证明,IoC 容器确实帮我们创建并注入了依赖。

4. 总结

这篇文章简单介绍了 Spring Bean 的定义及其与 IoC 容器的关系。Bean 并不是什么神秘的东西,本质上就是被 Spring 容器管理的对象

完整代码可以在这里查看:GitHub 项目地址


📌 小结一下重点:

  • ✅ Spring Bean 是由 Spring IoC 容器创建和管理的对象
  • ✅ 使用 @Component@Bean 等注解可以声明 Bean
  • ✅ 配置类 + @Configuration 是常见的 Bean 配置方式
  • ⚠️ IoC 是 Spring 的核心机制,别和传统 new 对象的方式搞混了

希望这篇文章能帮你彻底搞懂 Spring Bean 的本质,别再被“控制反转”这些术语绕晕了 😄


原始标题:What Is a Spring Bean? | Baeldung