당신이 나에게 명확하지 않은 질문이 있습니다. 달성하고자하는 것은 무엇입니까? 대신 무엇을 전달하고 싶은지 can I prevent an implementation from being passed ?
을 의미합니까? Null 또는 구현?
Nexus OSS가 Google Guice를 의존성 주입 프레임 워크로 사용하는 것이 맞습니다. 당신은 당신이 뭔가 같은 말 모듈을 만들 필요가 일부 인터페이스 구현을 결합하려면 :
bind(ReleaseRemover.class).to(DefaultReleaseRemover.class);
당신이 다른 주사는 그들이 매우 가능성이 붙어 DefaultReleaseRemover
에서 볼 수있다. 따라서 DefaultReleaseRemover
의 주입 된 구현에는 다른 주입이 포함됩니다.
DefaultReleaseRemover
은 @Singleton
으로 주석 처리됩니다. 즉, 전체 인젝터에 대해 DefaultReleaseRemover
클래스의 인스턴스가 하나만 있음을 의미합니다.
글쎄, 당신은 귀하의 인터페이스와 구현 및 귀하의 모듈 바인딩 있습니다. 이제 Guice Injector를 만들어서 그것을 사용하여 모든 객체를 생성해야합니다. 넥서스 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...);
페이지에서 Guice 사출 진입 점을 찾을 수 , 당신은 Guice 인젝터를 설치하려는 모든 모듈을 제공합니다. 일부 하위 모듈이 모듈 안에 설치되어있을 수 있습니다. 당신은 명시 적으로 그것을 createInjector
함수로 전달하지 않아도됩니다. 그래서, 당신이 Guice 구속력을 바꾸고 싶다면 거기에서 파기 시작하는 것이 좋습니다.
UPDATE :
나는 메커니즘을 모른다.하지만 당신은하지 그런 PrivateModule
:
당신은 내가 더 똑바로 직접 것
@Inject
public ReleaseRemoverTask(final @Named("custom") ReleaseRemover releaseRemover)
당신에게 CustomReleaseRemover
을 통과 할 모듈이 있어야 할
bind(ReleaseRemover.class).annotathedWith(Names.named("custom")).to(MyCustomReleaseRemover.class);
일부 Module.configuration()
의 구현을 바인드 할 필요가 앞으로도 Nexus OSS에서 어떻게 작동하는지 전혀 모르겠습니다. 어쩌면 누군가가 그 부분을 도울 수 있습니다.
Guice의 Inject보다는 javax.Inject 인 것 같습니다. 구체적인 클래스를 인스턴스화해야하는 것을 정의하는 어딘가의 구성 파일이 있어야합니다. – assylias
하지만 플러그인으로 쓰는 클래스도 호출됩니다 .... 그들은 내 클래스 이름을 모릅니다. 이것은 나에게 그들이 모든 구현을 찾아 하나씩 전달할 무언가가 있다는 인상을 준다. –