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 自动匹配。
相关推荐
逻辑驱动的ken15 小时前
Java高频面试场景题25
java·开发语言·深度学习·面试·职场和发展
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ17 小时前
通过java后端代码来实现给word内容补充格式文本内容控件,以及 设置控件的标记和标题
java·c#·word
無限進步D18 小时前
Java 面向对象高级 接口
java·开发语言
逸Y 仙X18 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
二哈赛车手18 小时前
新人笔记---Spring AI的Advisor以及其底层机制讲解(涉及源码),包含一些遇见的Spring AI的Advisor缺陷问题的解决方案
java·人工智能·spring boot·笔记·spring
薪火铺子18 小时前
Redis 缓存三大问题与解决方案
redis·spring·缓存
AC赳赳老秦19 小时前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
两年半的个人练习生^_^19 小时前
Java日志框架和使用、日志记录规范
java·开发语言·开发规范