在 Guice 中绑定,无需

2023-11-24

我有个问题: 通常在Guice中我使用bind(class).to(另一个类实现)...

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

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

这是有问题的代码部分:

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);

感谢您的回答


A bind没有的声明to被称为非目标结合(在 wiki URL 中被错误拼写为“Untargetted Bindings”)在 Guice 文档中。从该维基页面:

您可以在不指定目标的情况下创建绑定。这对于由以下任一注释的具体类和类型最有用@ImplementedBy or @ProvidedBy。无目标的[原文如此]绑定通知注入器有关类型的信息,因此它可能会急切地准备依赖项。

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

  1. 通过急切加载略微提高性能。

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

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

  2. 如果 Guice 无法创建你注入的对象,它会抛出异常,但在 @ImplementedBy 或 @ProvidedBy (或getInstance or injectMembers) 如果 Guice 尚未检查缺少绑定的类,则它不会失败。通过列出您使用的类,Guice 将像 (1) 中那样预先分析这些对象,但也会在应用程序启动时识别缺少绑定。这在开发过程中可能会很方便,特别是当您使用以下方式注入对象时getInstance or injectMembers应用程序启动后很长时间;您可能希望失败立即发生。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Guice 中绑定,无需 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • n个字符串的最长公共子串的Java实现

    我需要找到 n 个字符串的最长公共子串并在我的项目中使用结果 java中是否有任何现有的实现 库已经做到了这一点 关于什么并发树 这是一个小型 约 100 KB 库 可用于梅文中心 该算法使用组合Radix and 后缀树 众所周知 它有一
  • 使用按位运算求给定数字的平方根

    是否有一种算法可以使用按位运算求给定数字的平方根 有这段著名的代码魔法计算inverse平方根与一些非常聪明的小玩意 它被错误地归因于约翰 卡马克 这是更深入的挖掘进入它的起源 也许这就是你要问的 但我不建议使用它 在现代 CPU 上 它无
  • Java int 到 byte 的隐式转换

    我即将开始处理需要读取字节和创建字符串的事情 正在读取的字节表示 UTF 16 字符串 因此 为了测试一下 我想将 UTF 16 编码的简单字节数组转换为字符串 数组中的前 2 个字节必须表示字节顺序 因此必须是 0xff 0xfe 或 0
  • 告诉 gcc 专门展开循环

    我如何告诉 GCC 展开特定循环 我使用了 CUDA SDK 可以使用以下命令手动展开循环 pragma unroll gcc 有类似的功能吗 我用谷歌搜索了一下但找不到任何东西 GCC 8 获得了一个新的编译指示 允许您控制循环展开的方式
  • .gitattributes 中的 `* text=auto` 和 `* text eol=lf` 有什么区别?

    我一遍又一遍地查看文档 gitattributes但我无法找到关于这两者之间有什么区别的明确答案 text auto text eol lf Also is text auto仅适用于 或者它也可以与特定的扩展一起使用 在这种情况下有什么区
  • 绝对定位及其父元素

    我总是听说 当您使用绝对定位时 您想要充当其父级的元素需要有一个position of relative 我试图构建一个 CSS 下拉菜单 当我将其父元素设置为时 我正在努力让下拉菜单项拉伸超出主菜单项的宽度relative 下拉菜单项中的
  • 用户不活动时屏幕变暗

    我有一个应用程序 可以使用 4 个小时 但用户只需每 5 分钟需要进行一次输入或阅读屏幕 让手机进入睡眠状态并锁定屏幕有点烦人 所以我有两个选择 getWindow addFlags WindowManager LayoutParams F
  • svg 到 png 不起作用,怀疑 svg 元素差异

    我无法弄清楚为什么两个不同的 svg 会导致我的 javascript 在一个实例中工作 但在另一个实例中不起作用 我只交换了两个示例中的 svg 元素 一个有效 一个无效 这是两个 jsFiddles 中的代码 我从中得到的工作示例her
  • 在 Groovy/Java 中比较两个 XML 字符串/文件

    我正在编写单元测试来检查一些 XML 构建器 现在我遇到了预期结果和实际结果之间的语法差异问题 尽管它们的语义相同 Example 预期结果 您可以使用 GroovyXMLUnit像这样的实用程序 XMLUnit setIgnoreWhit
  • 如何根据选定的注释移动 MKMapView

    我有一个 MKMapView 它填充了我的整个视图 但是当选择一个图钉时 我会在地图顶部向上滑动另一个视图 我想移动地图 以便图钉出现在地图可见区域的中心 很难解释 但希望它是有道理的 提前致谢 您可以尝试从visibleMapRect对于
  • 将 jquery 函数包装在闭包中有什么好处?

    嗨 我一直忙于将我的 JQuery 知识提升到一个新的水平 到目前为止 我认为我已经理解了所有内容 但是当我冒险学习更高级的教程时 我注意到有几个实例 其中 JQuery 例程被包装在一个闭包 见下文 然而 让我困惑的是它传递一个 并返回
  • SQL 将结果连接到 codeigniter 中的对象中

    好的 一些背景知识 刚刚进入 codeigniter 不喜欢 sql 和服务器端脚本 我知道什么是连接 我第一次拥有多对多数据库 这是因为连接通常会产生以下示例 但我想解析它 而不必构建代码来忽略重复 这是一个 3 表连接示例 当我加入更多
  • 合并同一项目的两个git存储库

    我目前是唯一一位从事我从前任接手的项目的开发人员 当我接手这个项目时 它还没有受到源代码控制 因此 我创建了一个新的 git 存储库 对状态进行了初始提交 并从此开始对其进行处理 但最近我在备份中发现了同一个项目的一个古老版本 它实际上是一
  • 通过Windows C++让鼠标通过

    我正在开发一个 Win32 C 应用程序 我想忽略鼠标事件并让其传递到我的窗口下方的窗口 基本上我下面的窗口将处理鼠标事件 我不想使用 SendMessage 将鼠标消息发送到我下面的窗口或使用 SetCapture 有没有一种方法可以基本
  • 在 Dask 中排序

    我想找到替代方案pandas dataframe sort value在 dask 中运行 我走过来了设置索引 但它会按单个列排序 如何对 Dask 数据框的多列进行排序 目前为止Dask似乎还不支持多列排序 但是 创建一个新列来连接已排序
  • 找不到文件:mainwindow.obj

    我创建了一个 GUI 应用程序 gt QMainWindow 我在菜单 插槽中添加了 1 项 我创建了一个新项目 gt QDialog 我使用插槽方法尝试显示创建的对话框 但出现以下错误 mainwindow obj 1 错误 LNK201
  • 有没有办法了解“平台”访问网页的硬件资源?

    我希望能够从网页中了解浏览器的硬件资源 或者至少是一个粗略的估计 即使您检测到现代技术的存在 例如csstransforms3d csstransitions requestAnimationFrame 在浏览器中通过类似的工具Modern
  • Python,多线程太慢,多进程

    我是多处理新手 我了解一些有关线程的知识 但我需要提高计算速度 希望通过多重处理 示例说明 将字符串发送到线程 更改字符串 基准测试 将结果发回打印 from threading import Thread class Alter Thre
  • 将多维Json数组解析为Python

    我第一次尝试解析 JSON 并处理多维数组 这让我不知所措 secret Hidden minutes 20 link http www 1 com bookmark collection free link name free link
  • 在 Guice 中绑定,无需

    我有个问题 通常在Guice中我使用bind class to 另一个类实现 但是我在代码源中发现他们仅使用了bind class 没有 to another class Implementation 部分 这是什么意思 bind clas