You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SpringBoot中创建非可复用Bean

如何让SpringBoot为每次注入生成新的Bean实例

核心思路:修改Bean作用域

SpringBoot默认Bean是singleton(单例),所有注入点共享同一个实例。针对你的RestTemplateBuilder这种有状态Bean,要避免修改带来的副作用,只需把它的作用域改成prototype——这个作用域的Bean,每次被注入或获取时都会生成新实例。

实现方式1:直接给@Bean加@Scope注解

在声明RestTemplateBuilder的@Bean方法上添加@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE):

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.web.client.RestTemplateBuilder;

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RestTemplateBuilder restTemplateBuilder() {
    return new RestTemplateBuilder();
}

这样每处@Autowired RestTemplateBuilder都会拿到全新的实例,修改某个实例的配置不会影响其他使用方。

实现方式2:结合@Lazy优化(可选)

如果RestTemplateBuilder的创建开销较大,可以搭配@Lazy注解,让实例在真正被使用时才创建,避免不必要的资源消耗:

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Lazy
public RestTemplateBuilder restTemplateBuilder() {
    return new RestTemplateBuilder();
}

特殊场景处理:单例Bean中使用Prototype Bean

如果是在单例Bean里注入Prototype Bean,默认只会在单例Bean初始化时注入一次实例。要是想每次调用都拿到新的RestTemplateBuilder,可以用ObjectFactory或者Provider来动态获取:

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplateBuilder;

@Component
public class MyService {
    private final ObjectFactory<RestTemplateBuilder> builderFactory;

    // 构造注入ObjectFactory
    public MyService(ObjectFactory<RestTemplateBuilder> builderFactory) {
        this.builderFactory = builderFactory;
    }

    public void executeRequest() {
        // 每次调用getObject()都会生成新实例
        RestTemplateBuilder builder = builderFactory.getObject();
        RestTemplate restTemplate = builder.build();
        // 执行请求逻辑...
    }
}

注意点

  • Prototype作用域的Bean,Spring只负责创建实例,不会管理它的销毁生命周期(比如不会触发@PreDestroy注解方法),如果需要清理资源,要自己处理。

内容的提问来源于stack exchange,提问作者Rafael Lima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:55:20