2011-10-18 79 views
0

我是Guice的新手,在谷歌上搜索这个问题,但找不到满意的答案。Guice:注入参数化构造函数

public class X { 
    private Y y; 

    public X() { 
     y = new Y("abc", "xyz"); 
    } 
} 

public class Y { 
    private String str1; 
    private String str2; 

    public Y(String str1, String str2) { 
     this.str1 = str1; 
     this.str2 = str2; 
    } 
} 

现在,我想注入Y考虑类X的构造

我确实发现AssistedInject,但不是它的构造函数具有其中的一些 由吉斯,其中一些提供的参数由呼叫者提供。

这里,在这种情况下,构造函数的所有参数仅由调用者提供。

我该怎么做?

回答

1

我发现AssistedInject,但不是它的构造函数有 参数其中一些是由吉斯提供,其中一些被调用者提供 。

正确。

这里,在这种情况下,构造函数的所有参数仅由调用者提供 。

我该怎么做?

只要按照您的方式进行:使用new Y(...),X构造函数。

为什么你想在这种情况下使用Guice?

2

您可以使用绑定注释(或内置@Named)为此,请参阅第一次的Q的Guice FAQ

这给你一个办法区分开2种相同类型。例如

// in the module 
bind(String.class).annotatedWith(Names.named("logical.env.id")).toInstance(System.getProperty("logical.env.id", "UK")); 

// in the class 
@Inject 
public Foo(Bar barInstance, @Named("logical.env.id") String logicalEnvId) { 
}