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

Google Guice如何每次返回新实例?Spring与Guice注入差异咨询

在Guice中配置每次注入返回新实例(原型作用域)

嘿,作为同时上手Spring和Guice的新手,这个问题太正常了——毕竟俩框架的作用域配置语法确实有差异!在Guice里,要实现和Spring @Scope("prototype") 一样的“每次注入都返回新实例”的效果,主要有两种常用方式:

1. 使用@Prototype注解标注类

直接在你的目标类上加上Guice的@Prototype注解,这样Guice默认就会每次注入该类时创建新实例:

import com.google.inject.Prototype;

@Prototype
public class A {
    // 类的实现代码
}

之后不管是用@Inject注入到其他类,还是从Injector中获取A的实例,每次都会得到一个全新的对象。

2. 在Module中显式绑定原型作用域

如果不想在类上添加Guice专属注解,也可以在自定义的Module里通过绑定规则指定作用域:

import com.google.inject.AbstractModule;
import com.google.inject.Scopes;

public class MyAppModule extends AbstractModule {
    @Override
    protected void configure() {
        // 绑定A类到原型作用域
        bind(A.class).in(Scopes.PROTOTYPE);
    }
}

针对@Provides方法的情况

如果你是用@Provides方法来提供实例(类似Spring的@Bean),只需要给该方法加上@Prototype注解即可:

import com.google.inject.Provides;
import com.google.inject.Prototype;

public class MyAppModule extends AbstractModule {
    @Provides
    @Prototype
    A provideA() {
        return new A();
    }
}

补充说明

和Spring一样,Guice的默认作用域是单例(Singleton),所以如果不指定原型作用域,每次注入都会拿到同一个实例。而Scopes.PROTOTYPE(或@Prototype注解)对应的就是Spring中@Scope("prototype")的行为:每次请求实例时都会创建新对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:12