在 springboot 中,
@configuration注解是专门用来集中管理 bean 的核心方案,它可以替代传统 xml 配置文件,将所有第三方 bean、自定义 bean 统一在配置类中创建、管理,实现 bean 的集中化、模块化管理。
一、核心概念
@configuration:标记一个类为配置类,springboot 启动时会自动扫描并加载这个类,替代 xml 配置文件。@bean:写在配置类的方法上,方法的返回值就是一个 bean 对象,方法名默认是 bean 的名称。- 优势:集中管理所有 bean、支持依赖注入、支持配置属性注入、代码可读性强、便于维护。
二、实战步骤
1. 基础环境
springboot 项目(无需额外依赖,核心容器已包含 @configuration)
2. 创建统一配置类
创建 config 包,编写配置类,集中注册所有需要的 bean(自定义对象、第三方工具类等)。
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类)
// 自定义业务类(无需加 @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 即可使用:
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 指定名称(默认是方法名)
@bean(name = "customuserservice") // 指定bean名称
public userservice userservice() {
return new userservice();
}
注入时指定名称:
@resource(name = "customuserservice") private userservice userservice;
2. 配置多环境/模块化管理bean
可以拆分多个配置类,按模块管理:
datasourceconfig:管理数据库连接池 beanthreadpoolconfig:管理线程池 beanredisconfig:管理 redis 模板 bean
springboot 会自动扫描所有 @configuration 类。
3. 读取配置文件注入 bean
结合 @value 读取 application.yml 配置,动态创建 bean:
- application.yml
thread: core: 5
- 配置类中注入
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:
@bean(destroymethod = "shutdown") // 指定销毁方法
public executorservice threadpool() {
return executors.newfixedthreadpool(5);
}
四、总结
@configuration= 配置文件:专门用于集中、统一管理 bean,是 springboot 推荐的无 xml 方案。@bean= 注册 bean:方法返回值就是 spring 容器管理的对象。- 适用场景:
- 无法直接加
@component的第三方类(线程池、数据源、工具类) - 需要自定义创建逻辑的 bean
- 需要集中管理所有 bean,统一维护
- 无法直接加
- 依赖注入:配置类中方法参数可以直接注入其他 bean,spring 自动匹配。
到此这篇关于springboot 使用 @configuration 集中管理 bean的实战步骤的文章就介绍到这了,更多相关springboot @configuration 管理 bean内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论