Guice

时间:2017-02-14 09:13:15

标签: java dependency-injection guice

现在,我正在阅读Guice's official document.他们说

  

作为更正,只需限制两者的可见性   实现类及其构造函数。通常包   私有是两者的首选,因为这有利于:

     

将类内的类绑定在同一个包中

     

通过直接实例化方法对类进行单元测试

     

简单,助记   请记住,公众和@Inject就像精灵和小矮人:他们可以   共同努力,但在理想的世界里,他们会共存   独立地

通过阅读文档我知道public constructor有多危险。 引用的句子似乎是解决方案,但我不确定其确切含义。 那么,你能检查我的想法是否正确。

首先,他们说在同一个包中的模块中绑定类。 这意味着您可以在系统中拥有一个包。使用与包相对应的Module是好的吗?那么,基本上你有相同数量的Module和相同数量的包?

其次,你可以看到通过直接实例化对单元进行单元测试。 这意味着我们应该使用直接实例化对单元进行单元测试,而不是Guice' s Module? 我认为Guice对于测试也很有用,尤其是他们所说的单元测试。

我很困惑,有人能让我清楚吗?

1 个答案:

答案 0 :(得分:2)

  

首先,他们说在一个模块中绑定同一个包中的类。这意味着您可以在系统中拥有一个包。使用与包相对应的模块是好的吗?那么,基本上你有相同数量的模块和相同数量的包?

是。无论如何你应该总是使用包。除了玩具大小的程序外,不鼓励使用默认包。

我通常希望有一个名为org.whatever.foo.some.feature的模块类的FeatureModule包(即包的名称+ Module,而不是FeatureModule)。< / p>

  

其次,你可以通过直接实例化看到单元测试类。这意味着我们应该使用直接实例化而不是Guice的模块来对一个类进行单元测试?我认为Guice对于测试也很有用,特别是他们说的单元测试。

如果您直接注入要测试的内容,可以更轻松地查看您正在测试的内容。

当然,你可以使用guice,但是这里发生了一定数量的魔法&#34;使用绑定,可以隐藏测试中的意外行为。

这适用于单元测试;如果您正在进行集成测试,您可能希望使用与您的生产代码相关的内容,这可能涉及到guice。