java - 在不绑定(bind) Guice 的情况下

标签 java guice

我有一个问题: 通常在 Guice 中我使用 bind(classe).to(another_class_Implementation) ...

但是我在代码源中发现他们只使用了 bind(class) (没有部分 ".to(another_class_Implementation)")...

这是什么意思(不带“to 或 as”的 bind(class))?

这里是有问题的部分代码:

public class RestModule extends AbstractModule {

    @Override
    protected void configure() {

        bind(RootResource.class);
        bind(DeveloperUtilsRedirector.class);

        bind(M34Repository.class).to(M34RepositoryImpl.class);
        bind(IGARepository.class).to(IGARepositoryImpl.class);

感谢回答

最佳答案

没有 tobind 语句称为 Untargeted Binding (在 Guice 文档中被错误拼写为“Untargetted Bindings”)。来自该维基页面:

You may create bindings without specifying a target. This is most useful for concrete classes and types annotated by either @ImplementedBy or @ProvidedBy. An untargetted [sic] binding informs the injector about a type, so it may prepare dependencies eagerly.

您将在 Guice 中出于三个目的看到它:

  1. 通过预先加载略微提高性能。

    当 Guice 遇到它没有绑定(bind)的依赖项(例如,A 类)时,它会检查该类以查看它是否可以通过 @Inject 注释或零注入(inject)-arg 公共(public)构造函数。如果是,Guice 创建一个 Just-In-Time binding (或“隐式绑定(bind)”)。这是通过反射完成的,可能会导致其他绑定(bind)的级联(请求 A 检查 A,然后检查 A 的依赖项 B,然后检查 B 的依赖项 C,等等),这可能会导致运行时速度变慢。

    通过先发制人地进行非目标绑定(bind),您通知 Guice 一个可注入(inject)类,这允许它在启动时支付反射成本以获得更可预测的性能。

  2. 如果 Guice 无法创建您注入(inject)的对象,它会抛出异常,但在 @ImplementedBy 或 @ProvidedBy(或 getInstanceinjectMembers)的情况下如果 Guice 还没有检查缺少绑定(bind)的类,它就不会失败。通过列出您使用的类,Guice 将像 (1) 中那样预先分析这些对象,但也会在应用程序启动时识别出缺少绑定(bind)。这在开发过程中可能很方便,尤其是当您在应用程序启动很久之后使用 getInstanceinjectMembers 注入(inject)对象时;您可能希望故障立即发生。

  3. 虽然默认情况下启用隐式绑定(bind),但可以通过 requireExplicitBindings 禁用它们.这意味着任何注入(inject)的类都需要关联绑定(bind),包括具有合格构造函数的类。非目标绑定(bind)可以轻松解决这种情况。

关于java - 在不绑定(bind) Guice 的情况下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594106/

相关文章:

java - 在Java中注入(inject)多个参数同一个接口(interface)

java - Guice Injector 保持应用程序运行

java - 如何在启动时提高 Guice 性能

java hibernate 问题

java - 从 java 类调用 doGet Servlet 方法

java - 使用 IN 运算符的数据存储查询

java - Guice-JPA persistence.xml 不从属性文件中读取占位符

java - Guice requireBinding 到 TypeLiteral 抛出错误

java - 如何将映射键值收集到列表中

java - 如何使用 java 休息来使用 Angular 渲染 nv3d 烛台图?