我在 Nexus OSS 代码中看到这一行......
@Inject
public ReleaseRemoverTask( final ReleaseRemover releaseRemover )
{
this.releaseRemover = checkNotNull( releaseRemover );
}
以上可在 https://github.com/sonatype/nexus-oss/blob/master/components/nexus-core/src/main/java/org/sonatype/nexus/maven/tasks/ReleaseRemoverTask.java
但是ReleaseRemover.java是一个接口。
这里没有使用interface,所以在运行时应该只传递实现..这才有意义..所以我通过调试确认了,这个实现叫做。实现类是DefaultReleaseRemover.java。
为了支持我的论点,我为nexus编写了一个插件,并为ReleaseRemover编写了实现。
甚至那个也被捡起来了...
这是怎么做到的?在内部,他们正在使用Google Guice。。
Guice是在做传递这个函数中的实现的工作吗?这是像Google Guice这样的框架的属性吗?
如果所有的实现都这样通过,我可以阻止一个实现通过吗?
你的问题对我来说不清楚。你想实现什么?我可以通过什么方式阻止实现被传递
? 你想传递什么?空还是您的实现?
Nexus OSS使用GoogleGuice作为依赖注入框架是正确的。要将实现绑定到某个接口,您必须创建这样的模块:
bind(ReleaseRemover.class).to(DefaultReleaseRemover.class);
正如您在<code>DefaultReleaseRemover</code>中看到的,还有其他注入,它们很可能会卡住。因此,<code>DefaultReleaseRemover</code>中的注入实现包含另一个注入,以此类推。
DefaultRelaseRemover
被注释为@Singleton
,这意味着整个注入器只有一个DefaultRelaseRemover
类的实例。
好吧,你有你的接口和实现,你的模块有绑定。现在您需要创建Guice Injector并使用它为您创建所有对象。对于Nexus OSS,您可以在以下位置找到Guice Injection入口点https://github.com/sonatype/nexus-oss/blob/de6a606372349283f78aeaa498e9a70d4dd967b1/components/nexus-webapp/src/main/java/org/sonatype/nexus/webapp/WebappBootstrap.java第118行
Guice.createInjector(your modules...);
看,您将向Guice注入器提供要安装的所有模块。请注意,模块内部可能安装了一些子模块。您不必将其显式传递给 createInjector
函数。因此,如果您想更改一些 Guice 绑定,那么从那里开始挖掘是很好的开始。
更新:
我不懂机械。但您必须在某些<code>模块中绑定您的实现。configuration()作为
bind(ReleaseRemover.class).annotathedWith(Names.named("custom")).to(MyCustomReleaseRemover.class);
该模块不应是私有模块
:)
然后你会把你的自定义释放卸妆
作为
@Inject
public ReleaseRemoverTask( final @Named("custom") ReleaseRemover releaseRemover )
我会更直接地告诉你,但我不知道它在Nexus OSS中是如何工作的。也许有人能帮你完成那部分。
在下面的代码中,这四种方法用于布局推理。不过,我有点困惑,为什么需要所有这些工具,以及它们之间的不同之处。在这个过程中,它们用于使单元格的高度随着自动布局而动态变化。(摘自此问题的存储库。) 这是一段关于细胞高度的代码: 但是他们有什么不同之处?为什么他们都需要?
问题内容: 我在另一个Stack Overflow问题上读到,Python就像Ruby一样,因为它涉及到“一切都是对象”,而Python中的一切都是对象,就像Ruby一样。 这是真的?Python中的所有对象都是像Ruby这样的对象吗? 两者在这方面有何不同?或者它们真的相同吗?例如,您能拿一个数字来做我所看到的Ruby吗: 可以在Python中以相同的方式完成吗? 问题答案: DiveIntoP
这不是正确的我知道,但我不能弄明白??
我试图获得一个关于Spring代理如何工作的高级视图。为什么我应该在我的应用程序中使用“API接口&Impl bean”模式或者只使用“bean类”模式。我读了不少这样的答案,但它们都很古老,我相信大多数与Java7和Spring3.x相关。我想知道在2020年,Java11+与Spring5.x(Spring Boot2.x)仍然有什么关系。是否有“最佳做法”可循? 此外,由于的可用性,如果我有
本文向大家介绍通过C#实现自动售货机接口,包括了通过C#实现自动售货机接口的使用技巧和注意事项,需要的朋友参考一下 下面分几部分介绍C#实现自动售货机接口的方法,代码写的非常详细,不懂的地方有注释可以参考下。 MachineJP类: 第1部分:串口初始化,串口数据读写 第2部分:接收串口数据,并响应货机,向货机发送数据 第3部分:货机状态、投币、出货等接口 ReceiveDataColle
问题内容: 从php.net获得它,但是我不确定这是每个人如何破坏所有会话的方式吗? 代码会破坏所有会话吗?这是最常见的方式吗?你们如何破坏php会话? 哦,对了,那是什么?所有会话名称?例如,......? 我不需要再使用了吗? 和之间有什么区别? 问题答案: 首先,您应该知道什么是会话:您可以将会话视为与随机标识符(会话ID)相关联的服务器端数据容器。该会话ID需要由客户端提供,以便服务器可以