2014-03-03 43 views
1

我看到的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上述发现是一个接口。

在这里接口没有用,所以只有实现应该在运行时传递..这只是有道理的.. 所以我通过调试确认它的实现被调用。实现类是DefaultReleaseRemover.java

为了支持我的论点,我为nexus编写了一个插件,并为ReleaseRemover写了一个实现。

即使是被拾起......

这是如何完成的? 内部他们正在使用谷歌Guice ..

是Guice做这个工作的实现里面传递这个函数吗? 这是像谷歌Guice框架的财产吗?

如果所有的实现都是这样传递的,我可以阻止一个实现被传递吗?

+0

它似乎是javax.Inject而不是guice的注入 - 必须有一个配置文件定义哪个具体类应该实例化。 – assylias

+0

但是即使是我在一个插件中写的类也会被调用....他们不知道我的类名是否正确?这给我一个印象,他们有一些东西可以找到所有的实现并逐个传递。 –

回答

0

你的问题不是很清楚。你想实现什么?什么意思can I prevent an implementation from being passed ?你想传递什么?空或您的实施?

你说的对,Nexus OSS使用Google Guice作为依赖注入框架。要实现绑定到某个接口,你必须创造一个你说的是这样的模块:

bind(ReleaseRemover.class).to(DefaultReleaseRemover.class); 

正如你在DefaultReleaseRemover看到有另一种注射,他们极有可能卡住了。所以在DefaultReleaseRemover注入的执行包含另一个注射等。

DefaultReleaseRemover注释为@Singleton,这意味着整个注射器只有一个DefaultReleaseRemover类的实例。

那么,你有你的界面和实现,你的模块绑定。现在您需要创建Guice Injector并使用它为您创建所有对象。 适用于Nexus OSS你可以在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...); 

请参阅查找吉斯注射切入点,将为你提供你想要安装到吉斯喷油器的所有模块。请注意,模块内可能会安装一些子模块。你不必明确地将它传递给createInjector函数。所以,如果你想改变一些Guice绑定,那么从这里开始挖掘是一件好事。


UPDATE:

我不知道的机制。但是你必须在一些Module.configuration()您的实现绑定为

bind(ReleaseRemover.class).annotathedWith(Names.named("custom")).to(MyCustomReleaseRemover.class); 

模块应不PrivateModule :)

然后你会CustomReleaseRemover传给你作为

@Inject 
public ReleaseRemoverTask(final @Named("custom") ReleaseRemover releaseRemover) 

我会指引你更直向前,但我不知道它如何在Nexus OSS中工作。也许有人可以帮你解决这个问题。

+0

好的。要明确我是否可以阻止任何一个特定的实现被单独传递,例如只传递我在我的插件中的实现,而不是DefaultReleaseRemover,它也是一个实现,但是在核心连接中。“ –

+0

查看默认的Nexus插件,其中一些插件包含Guice模块。所以,你可以找出Guice是如何工作的插件。 –

相关问题