Guice构造函数注入String依赖项(或其他未绑定的原语)?

And*_*rew 0 java constructor dependency-injection guice

这是一些代码:

public class InjectedClass{
    private final Dependency dependency;
    private final String string;
    @Inject 
    public InjectedClass(Dependency dependency, String string){
        this.dependency=dependency;
        this.string=string;
    }
 }
Run Code Online (Sandbox Code Playgroud)

假设我已经将我的依赖项绑定在我的模块中,但是我没有对String进行任何绑定.Guice如何/如何选择成为String参数的默认值?在我(更复杂的)测试用例中,似乎将其设置为"",但是它的逻辑如何对我来说并不明显,我不知道这是否是确定性行为.

Chr*_*ber 5

默认情况下,Guice将实例化任何具有任何对象的对象

  • @Inject标记的非私有构造函数
  • 非私有的无参数构造函数
  • 默认构造函数(没有构造函数)

因为String有一个no-args公共构造函数,所以new String()将创建一个等价的字符串 ""

这是确定性行为,并且将在具有上述条件的任何类型中发生.如果你担心它,你可以做到

binder().requireAtInjectOnConstructors()
Run Code Online (Sandbox Code Playgroud)

那么Guice只会报告一个缺失的绑定.此外,还计划进行未来的增强,以防止java.lang.*类型在没有限定符/绑定注释的情况下被绑定.这也会阻止像String或Integer这样的核心类型自动绑定""或0,因为有人注入了它们.