1
저는 Guice에서 새로운데, AssistedInject를 이해하려고합니다.Guice가 주사를 보조했습니다.
클래스 내가 주입 할 :
public class I1 {
}
클래스 원호 주입 :
public interface ICla {
}
public class Cla implements ICla{
public Integer t;
public I1 i;
@Inject
public Cla(Integer t, @Assisted I1 i) {
this.t = t;
this.i = i;
}
}
공장
public interface IClaFactory {
Cla create(Integer t);
}
그리고 메인 클래스 나는 아주 간단한 프로젝트를 :
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new Module());
IClaFactory factory = injector.getInstance(IClaFactory.class);
}
private static class Module extends AbstractModule {
protected void configure() {
install(new FactoryModuleBuilder()
.implement(ICla.class, Cla.class).build(IClaFactory.class));
}
}
}
하지만 여전히 작동하지 않으며 이해하지 못합니다. 어디서 잘못 되었나요? 와 "지원"할 수있는 매개 변수 팩토리 인터페이스에 정의 된 매개 변수입니다 :
Exception in thread "main" com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for ru.test.factory.I1 annotated with @com.google.inject.assistedinject.Assisted(value=) was bound.
while locating ru.test.factory.I1 annotated with @com.google.inject.assistedinject.Assisted(value=)
for parameter 1 at ru.test.factory.Cla.<init>(Cla.java:11)
at ru.test.factory.IClaFactory.create(IClaFactory.java:1)
at com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:660)
at com.google.inject.assistedinject.FactoryModuleBuilder$1.configure(FactoryModuleBuilder.java:335) (via modules: ru.test.Main$Module -> com.google.inject.assistedinject.FactoryModuleBuilder$1)
2) Could not find a suitable constructor in java.lang.Integer. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
at java.lang.Integer.class(Integer.java:52)
while locating java.lang.Integer
for parameter 0 at ru.test.factory.Cla.<init>(Cla.java:11)
at ru.test.factory.IClaFactory.create(IClaFactory.java:1)
at com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:660)
at com.google.inject.assistedinject.FactoryModuleBuilder$1.configure(FactoryModuleBuilder.java:335) (via modules: ru.test.Main$Module -> com.google.inject.assistedinject.FactoryModuleBuilder$1)
그것은 내 문제를 해결했다. Guice가 나를 도와 준다고 생각했지만 실제로는 Guice가 내 도움이 필요했습니다. – Andrew
@Andrew 문제가 팔렸기 때문에 기쁩니다. 그랬기 때문에이 대답을 받아 들일 수 있겠습니까? 답의 요점 아래에있는 체크 표시를 클릭합니다. 감사 ;-) –