标签: guice

Guice multibindings包在导入中丢失

我在我的IDE中通过常春藤获得了google.inject包,但是,我没有看到pacakage

com.google.inject.multibindings.Multibinder
Run Code Online (Sandbox Code Playgroud)

这里引用了哪个

http://google-guice.googlecode.com/svn/trunk/latest-javadoc/com/google/inject/multibindings/Multibinder.html

我想知道---也许有多个guice转发我应该从中拉出来?

但是,我会看到以下软件包:com.google.inject - > binder/internal/matcher/util

我的常春藤定义:

 <dependency org="com.google.inject" name="guice" rev="3.0" conf="*->*,!javadoc"/>
Run Code Online (Sandbox Code Playgroud)

java guice ivy maven

1
推荐指数
1
解决办法
1610
查看次数

我可以创建一个提供程序,每次调用get时都会返回一个新对象

我希望在课堂上有一个提供者成员,当'get'调用时,每次都会给我一个新对象.我怎样才能做到这一点?

public class GuiceInjectionTest
{
  @Inject
  Provider<MyClass> provider;

  public Provider<MyClass> get()
  {
    //I want a new instance every time here that is injected by guice
    return provider.get() 
  }
}
Run Code Online (Sandbox Code Playgroud)

注意我希望这个新实例由Guice注入,所以我不能new MyClass()在提供者实现中创建一个.

java provider guice

1
推荐指数
1
解决办法
1996
查看次数

Java Guice - 在Spring中创建多个'beans'的guice等效方法吗?

Guice有办法简单地让我创建具有不同值/参数的多个对象/ bean吗?例如,假设我有Triangle类,我希望在配置中创建多个三角形,一个带参数lengh = 6,一个带length = 5,另一个没有参数.如果我尝试这样的事情:

bind(Triangle.class).to(IsoTriangle.class);
bind(Triangle.class).toInstance(new Triangle(6));
Run Code Online (Sandbox Code Playgroud)

我收到错误:

A binding to test.Triangle was already configured at test.Configuration.configure(Configuration.java:14). at test.Configuration.configure(Configuration.java:15)

如果我尝试在main方法中调用两个Triangle实例,如:

Triangle tr = injector.getInstance(Triangle.class);
Triangle tr2 = injector.getInstance(Triangle.class);
Run Code Online (Sandbox Code Playgroud)

第二个实例被忽略了,因为我没有看到第二次使用它.

我读到有这样的事情:

class LegModule extends PrivateModule {
  private final Class<? extends Annotation> annotation;

  LegModule(Class<? extends Annotation> annotation) {
    this.annotation = annotation;
  }

  @Override protected void configure() {
    bind(Leg.class).annotatedWith(annotation).to(Leg.class);
    expose(Leg.class).annotatedWith(annotation);

    bindFoot();
  }

  abstract void bindFoot();
}
  public static void main(String[] args) {
    Injector injector = …
Run Code Online (Sandbox Code Playgroud)

java spring dependency-injection guice

1
推荐指数
1
解决办法
2760
查看次数

Guice可以断言单例不是直接实例化的吗?

如果我尝试构造单例的新实例,Guice是否可能抛出异常?

例如:

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MySingleton.class).in(Singleton.class);
    }
}

@Singleton
public class MySingleton {
    MySingleton() { /* ... */ }
}

public class RightWay {
    public void withInjector() {
        Injector injector = Guice.createInjector(new MyModule());
        MySingleton mySingleton = injector.getInstance(MySingleton.class);
    }
}

public class AnotherRightWay {
    private final MySingleton mySingleton;

    @Inject
    public AnotherRightWay(MySingleton mySingleton) {
        this.mySingleton = mySingleton;
    }
}

public class TheWrongWay {
    public void directInstantiation() {
        MySingleton mySingleton = new MySingleton(); // I …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection guice

1
推荐指数
1
解决办法
64
查看次数

Guice注入空检查?

我在构造函数级别使用google guice注入.对参数进行空检查以确保它们不为null或者为我们执行注入是否有意义.顺便说一下,它是一个公共构造函数.

公共方法怎么样?

java inject guice

1
推荐指数
1
解决办法
1430
查看次数

Guice将抽象基类绑定到具体类

我有一个具有以下绑定的模块

bind(BaseAbstract.class).to(Concrete.class).in(Scopes.SINGLETON);
bind(Concrete.class).toProvider(.....);
Run Code Online (Sandbox Code Playgroud)

当我要求Guice为我提供两个类时,一个需要基础,一个需要具体,则创建了两个单独的具体对象。

injector.getInstance(INeedABaseAbstract.class);
injector.getInstance(INeedAConcrete.class);
Run Code Online (Sandbox Code Playgroud)

我只希望Guice将一个单一的Concrete实例提供给需要BaseAbstract或Concrete的类。

java guice

1
推荐指数
1
解决办法
1873
查看次数

后期创建初始化guice singleton

有没有办法让guice在实例化单例后调用init()方法?在构造函数中调用init()不是一个选项,因为init()可以被子类覆盖.

java guice code-injection

1
推荐指数
1
解决办法
4405
查看次数

为什么Guice为我的单身人士创建一个新实例?

我有这个guice代码

public class MainModule extends AbstractModule {

    @Override
    protected void configure() {
  bind(GlobalSettings.class).toProvider(GlobalSettingsProvider.class).in(Singleton.class);
}
Run Code Online (Sandbox Code Playgroud)

public class GlobalSettingsProvider implements Provider<GlobalSettings> {

    @Override
    public GlobalSettings get() {

        GlobalSettings globalSettings = new GlobalSettings();
        globalSettings.isDummyRun = Boolean.parseBoolean(System.getProperty("isDummyRun", "false"));
        globalSettings.inputFlavor = System.getProperty("input_flavor", "none");
    }
}
Run Code Online (Sandbox Code Playgroud)

public class A(){

    public A() {
        this.injector = Guice.createInjector(new MainModule());
injector.getInstance(IHttpClientReRunWrapper.class);
        globalSettings = injector.getInstance(GlobalSettings.class);

    resultsComparerRunner1 = injector.getInstance(ResultsComparerRunner.class);
    resultsComparerRunner2 = injector.getInstance(ResultsComparerRunner.class);
    resultsComparerRunner3 = injector.getInstance(ResultsComparerRunner.class);
  }
}
Run Code Online (Sandbox Code Playgroud)

public class ResultsComparerRunner(){

public class ResultsComparerRunner(){
initStaticFromInjector();
}

    private void initStaticFromInjector() { …
Run Code Online (Sandbox Code Playgroud)

java singleton guice

1
推荐指数
1
解决办法
529
查看次数

为什么使用Guice Provider而不是正常注入

很抱歉提出愚蠢的问题,但我对Java和Guice框架很新.我无法理解Guice Provider类的使用,它提供了正常注入实例的任何压缩类的实例.据我所知,它允许您创建一个类的多个实例,其中Injected实例始终是Singleton.这是唯一的区别还是还有什么呢?

即区别:

@Inject SomeClass someObjcet;

VS

@Inject Provider<SomeClass> provider; provider.get();

java dependency-injection guice

1
推荐指数
1
解决办法
1121
查看次数

在多模块环境中使用依赖注入(通过Guice)

我在涉及Guice并避免使用非Guice单身人士方面有些两难。考虑那里有3个模块的多模块项目:sharedfrontendbackend。无论是frontendbackend使用的一个实例Profiling的类的内部shared模块(其时间的方法,和在整个项目中广泛使用)。

几乎每个类都需要使用此Profiling实例(包括User用户连接时动态创建的对象)。

如果每个单独的类都需要该类的一个实例Profiling,则执行该方法的不同方法会有一些缺点:

解决方案1(在构造函数中,复制到实例字段):

private final Profiling profiling;

@Inject
public User(Profiling profiling, String username)
Run Code Online (Sandbox Code Playgroud)

缺点:您必须Profiling每个构造函数包含一个对象。这很麻烦,而且毫无意义。您还必须Injector静态存储(或注入)Guice ,以便您可以动态创建User对象,而不仅仅是在首次加载程序时。

解决方案2(仅作为实例字段):

@Inject
private Profiling profiling;

public User(String username)
Run Code Online (Sandbox Code Playgroud)

缺点:与上面类似,您必须使用Guice Injector实例化每个对象。这意味着要User动态创建对象,需要在创建User对象的类中使用Injector的实例。

解决方案3(作为一个(主)类中的静态字段,由我们手动创建)

public static final Profiling PROFILING; // Can also use a get method

public Application() {
    Application.PROFILING …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection structure guice

1
推荐指数
1
解决办法
1176
查看次数