当前位置: 首页 > 知识库问答 >
问题:

使用guice注入类

蔚俊人
2023-03-14

我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。

我的课程如下:

public class Foo<T> {

    private Class<T> clazz;

    Foo(Class<T> clazz) {
        this.clazz = clazz;
    }
}

我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?

共有2个答案

能旭
2023-03-14

使用

bind(new TypeLiteral<Class<SomeClass>>() {}).toInstance(SomeClass.class);

将Guice配置为将某个CLass.class注入

<代码>Foo

习斌
2023-03-14

是的,您可以使用Guice内置的TypeLiteral注入来完成。

public class Main {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector();

        Test<Integer> testInt = injector.getInstance(Key.get(new TypeLiteral<Test<Integer>>() {}));
        testInt.action();

        Test<String> testString = injector.getInstance(Key.get(new TypeLiteral<Test<String>>() {}));
        testString.action();
    }

    public static class Test<T> {
        private final Class<? super T> clazz;

        @Inject
        public Test(TypeLiteral<T> literal) {
            this.clazz = literal.getRawType();
        }

        public void action() {
            System.out.println(clazz);
        }
    }
}

我不太清楚为什么getRawType()返回Class

 类似资料:
  • 问题内容: 我正在尝试使用Guice注入通用类型。我的Repository 位于Cursor类中。 因此,当我创建Cursor 时,我还希望Guice将我的存储库注入Repository 。有没有办法做到这一点? 问题答案: 您必须使用: 要获取的实例,则需要: 在FAQ中有更多细节。

  • 我正在使用 scala play 2.5,在尝试在我的一个控制器中注入对象时出现以下错误。我正在使用 play 给出的默认注入框架,即 Guice。 这是控制器: 以下是我想注入的服务: 这就是我使用它的方式:

  • (子资源)再次基于构造函数中传入的用户实现为普通的Jersey类。 但是,我的子资源也需要访问字段(如或)。根据Jersey文档,字段不会为子资源注入,因为它们的生命周期未知(文档似乎是真的)。 这对我来说是非常不可原谅的:我真的需要访问这些值。 作为一种解决办法,我目前将这些值作为额外的构造函数参数传递给我的子资源,我认为这一切都不舒服。 我能以某种方式创建这些映射吗? 问题是,我不知道如何在G

  • 目前,我将辅助注射与命名参数一起使用,如下所示: 这很棒。但是我认为使用字符串作为参数的标识符有点难看。我想做的是以下内容: 所以本质上我想要自定义辅助注释。有办法做到这一点吗?

  • 我有一个Maven模块,我在其中定义了一些跨其他几个Maven模块共享的UTIL。在本模块中,我想创建一些单例: 然后我将我的界面绑定到: 假设我想使用另一个Maven模块(比如web服务)中的这个单例,我该如何实现呢?我找到的唯一方法是在util Maven模块中创建一个类,如: 或者,我可以在Guice教程中看到的静态main方法中创建注入器,并将实例保存在某个地方。 然后从我的Web服务中执

  • 我想在使用guice实例化子类时,将依赖项注入父类。在下面的示例中,我试图创建的一个实例,同时希望能够在运行时使用Guice注入。我该怎么做?