SpringBoot :使用 @Configuration 集中管理 Bean

在 SpringBoot 中,@Configuration 注解 是专门用来集中管理 Bean 的核心方案,它可以替代传统 XML 配置文件,将所有第三方 Bean、自定义 Bean 统一在配置类中创建、管理,实现 Bean 的集中化、模块化管理。


目录

    • 一、核心概念
    • 二、实战步骤
      • [1. 基础环境](#1. 基础环境)
      • [2. 创建统一配置类](#2. 创建统一配置类)
      • [3. 配套的业务类(无注解,纯Java类)](#3. 配套的业务类(无注解,纯Java类))
      • [4. 测试使用集中管理的 Bean](#4. 测试使用集中管理的 Bean)
    • 三、高级用法
      • [1. 给 Bean 指定名称(默认是方法名)](#1. 给 Bean 指定名称(默认是方法名))
      • [2. 配置多环境/模块化管理Bean](#2. 配置多环境/模块化管理Bean)
      • [3. 读取配置文件注入 Bean](#3. 读取配置文件注入 Bean)
      • [4. Bean 销毁方法(资源释放)](#4. Bean 销毁方法(资源释放))
    • 四、总结

一、核心概念

  1. @Configuration :标记一个类为配置类,SpringBoot 启动时会自动扫描并加载这个类,替代 XML 配置文件。
  2. @Bean :写在配置类的方法上,方法的返回值就是一个 Bean 对象,方法名默认是 Bean 的名称。
  3. 优势:集中管理所有 Bean、支持依赖注入、支持配置属性注入、代码可读性强、便于维护。

二、实战步骤

1. 基础环境

SpringBoot 项目(无需额外依赖,核心容器已包含 @Configuration)

2. 创建统一配置类

创建 config 包,编写配置类,集中注册所有需要的 Bean(自定义对象、第三方工具类等)。

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 全局Bean配置类:集中管理所有Bean对象
 */
@Configuration // 核心注解:标记为配置类
public class GlobalBeanConfig {

    // ==================== 1. 管理自定义 Bean ====================
    /**
     * 创建自定义 UserService Bean(也可以用 @Service 注解,这里演示配置类方式)
     * @return Bean 对象
     */
    @Bean // 方法名 userService 就是 Bean 的名称
    public UserService userService() {
        return new UserService();
    }

    // ==================== 2. 管理第三方工具类 Bean ====================
    /**
     * 注册线程池 Bean(第三方类,无法加 @Component,必须用配置类管理)
     */
    @Bean
    public ExecutorService threadPool() {
        return Executors.newFixedThreadPool(5);
    }

    // ==================== 3. 带依赖注入的 Bean ====================
    /**
     * 创建 OrderService Bean,依赖上面的 userService Bean
     */
    @Bean
    public OrderService orderService(UserService userService) { // 自动注入已注册的 Bean
        OrderService orderService = new OrderService();
        // 手动注入依赖
        orderService.setUserService(userService);
        return orderService;
    }
}

3. 配套的业务类(无注解,纯Java类)

java 复制代码
// 自定义业务类(无需加 @Service/@Component,由配置类统一注册)
public class UserService {
    public String getUserInfo() {
        return "用户信息:集中管理的Bean";
    }
}

public class OrderService {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public String getOrderInfo() {
        return "订单信息,依赖:" + userService.getUserInfo();
    }
}

4. 测试使用集中管理的 Bean

直接通过 @Autowired 注入配置类中注册的 Bean 即可使用:

java 复制代码
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

@RestController
public class TestController {

    // 注入配置类中创建的 Bean
    @Resource
    private UserService userService;

    @Resource
    private OrderService orderService;

    @Resource
    private ExecutorService threadPool;

    @GetMapping("/test")
    public String test() {
        // 测试自定义Bean
        System.out.println(userService.getUserInfo());
        // 测试依赖注入的Bean
        System.out.println(orderService.getOrderInfo());
        // 测试第三方Bean
        threadPool.execute(() -> System.out.println("线程池Bean执行成功"));

        return "Bean 集中管理测试成功";
    }
}

三、高级用法

1. 给 Bean 指定名称(默认是方法名)

java 复制代码
@Bean(name = "customUserService") // 指定Bean名称
public UserService userService() {
    return new UserService();
}

注入时指定名称:

java 复制代码
@Resource(name = "customUserService")
private UserService userService;

2. 配置多环境/模块化管理Bean

可以拆分多个配置类,按模块管理:

  • DataSourceConfig:管理数据库连接池 Bean
  • ThreadPoolConfig:管理线程池 Bean
  • RedisConfig:管理 Redis 模板 Bean

SpringBoot 会自动扫描所有 @Configuration 类。

3. 读取配置文件注入 Bean

结合 @Value 读取 application.yml 配置,动态创建 Bean:

  1. application.yml
yaml 复制代码
thread:
  core: 5
  1. 配置类中注入
java 复制代码
import org.springframework.beans.factory.annotation.Value;

@Configuration
public class ThreadPoolConfig {

    @Value("${thread.core}")
    private Integer corePoolSize;

    @Bean
    public ExecutorService threadPool() {
        return Executors.newFixedThreadPool(corePoolSize);
    }
}

4. Bean 销毁方法(资源释放)

适合线程池、连接池等需要关闭的 Bean:

java 复制代码
@Bean(destroyMethod = "shutdown") // 指定销毁方法
public ExecutorService threadPool() {
    return Executors.newFixedThreadPool(5);
}

四、总结

  1. @Configuration = 配置文件 :专门用于集中、统一管理 Bean,是 SpringBoot 推荐的无 XML 方案。
  2. @Bean = 注册 Bean:方法返回值就是 Spring 容器管理的对象。
  3. 适用场景 :
    • 无法直接加 @Component 的第三方类(线程池、数据源、工具类)
    • 需要自定义创建逻辑的 Bean
    • 需要集中管理所有 Bean,统一维护
  4. 依赖注入:配置类中方法参数可以直接注入其他 Bean,Spring 自动匹配。
相关推荐
shuoshuohaohao10 小时前
MyBatis 小知识点
java·spring·mybatis
海上小飞龙10 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
谢亮_vipxieliang11 小时前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂11 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
打工仔折腾 AI12 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
ZealSinger12 小时前
Java虚拟线程上线后瓶颈转移到哪看三层
java·开发语言·firefox
2601_9611332812 小时前
盘立方软件指标文华期货公式下载
java
蜗牛互联网12 小时前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
Sirens.12 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
sunshine22 girl13 小时前
Java学习五 面向对象高级5 内部类1
java·学习