- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我听说过“@ImplementedBy 是邪恶的”的说法,理由是它破坏了 DI 概念并使接口(interface)意识到其实现者。
在某些情况下这可能是正确的,但我经常发现它只会导致更干净的代码(不需要维护很长的模块),而不会真正伤害过程中的任何东西。
作为实用主义者,而不是纯粹主义者,您认为什么时候值得使用@ImplementedBy?
最佳答案
我对@ImplementedBy 有同样的呃、恶心、恶心的感觉,但同时,它非常有用。 Spring 必须扫描您给它的包列表中的所有类。在 Guice 中,您不必配置要扫描的包列表,@ImplementedBy 是关键(如果不使用 Binder 进行绑定(bind))。当它在第一个 Injector.getInstance 上降低您的对象层次结构并命中一个接口(interface)时,它然后使用 @ImplementedBy 找到默认实现(只要 Binder 中没有覆盖该默认值的内容)。
我们也使用@ImplementedBy。我们发现它使用起来非常好,它有点糟糕,但它可以正常工作并且工作得很好,因为它是 DI,所以它并不真正依赖于实现,因为无论如何你都可以用新的绑定(bind)覆盖绑定(bind)。
与此同时,接口(interface)通常越来越少地与 DI 框架一起使用。所有 DAO 接口(interface)在我们的项目中都消失了,我们仍然可以为 DAO 交换模拟对象。 java 类是隐式接口(interface),可以在不需要接口(interface)的情况下进行模拟。我们现在保留主要 api 的接口(interface)使用非常清晰,而不是将其与实现代码混淆。对于 DAO,我们不再需要它。
关于java - Guice 的@ImplementedBy 是邪恶的吗?在某些情况下是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197178/
我听说过“@ImplementedBy 是邪恶的”的说法,理由是它破坏了 DI 概念并使接口(interface)意识到其实现者。 在某些情况下这可能是正确的,但我经常发现它只会导致更干净的代码(不需
我是一名优秀的程序员,十分优秀!