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 自动匹配。
相关推荐
xiaoshuaishuai82 小时前
C# Codex 脚本编写
java·服务器·数据库·c#
Flittly2 小时前
【SpringSecurity新手村系列】(4)验证码功能实现
java·spring boot·安全·spring
Flittly2 小时前
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
java·笔记·安全·spring·springboot
小小码农Come on2 小时前
C++访问QML控件-----QML访问C++对象属性和方法
java·开发语言·c++
Stella Blog2 小时前
狂神Java基础学习笔记Day04
java·笔记·学习
RReality2 小时前
【Unity Shader URP】Matcap 材质捕捉实战教程
java·ui·unity·游戏引擎·图形渲染·材质
那个失眠的夜3 小时前
AspectJ
java·开发语言·数据库·spring
杨凯凡3 小时前
【014】基本类型与包装类:缓存、相等性、NPE
java·数据结构·缓存
MateCloud微服务4 小时前
懂你所需,利爪随行:MateClaw 正式开源,补齐 Java 生态的 AI Agent 拼图
spring boot·aigc·javaagent·aiagent·openclaw·mateclaw·javaclaw