【问题标题】:Guice assisted injectGuice 辅助注射
【发布时间】:2018-05-05 23:52:54
【问题描述】:

我是 Guice 的新手,所以我想了解 AssistedInject。 我有一个非常简单的项目:

我要注入的类:

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)

【问题讨论】:

    标签: java dependency-injection guice inject assisted-inject


    【解决方案1】:

    @Assisted-ing 参数错误:“协助”的参数是工厂接口中定义的参数。在这种情况下,这是您的 Integer,而不是您的 I1

    这将起作用:

    @Inject
    public Cla(I1 i, @Assisted Integer t) {
        this.t = t;
        this.i = i;
    
    }
    

    【讨论】:

    • 它解决了我的问题。我以为 Guice @Assisted 为我服务,但事实上,我 guice 需要我的帮助 :)
    • @Andrew 我很高兴它卖掉了你的问题。既然这样做了,您介意将此答案标记为已接受吗?它点击答案点下方的复选标记。谢谢;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多