小编Ale*_*x M的帖子

如何注射注射器?

情况:我需要一些延迟依赖实例化FooClass,所以我Injector作为构造函数参数传递给类.

private final Injector m_injector;

public FooClass(@Named("FooInjector") Injector injector) {
m_injector = injector;
}
Run Code Online (Sandbox Code Playgroud)

但是guice不允许绑定核心类(注入器,模块等).解决办法是什么?

dependency-injection guice

29
推荐指数
3
解决办法
2万
查看次数

在哪里保持guice注射器?

你有什么建议?

我发现最适合我的解决方案 - 在枚举类中保留注入器和模块.好处:

  1. 喷射器和模块创建一次,
  2. 可以在运行应用程序时使用不同类的注入器(不仅仅是在引导程序中),
  3. 注射器保存在一个地方,很容易找到.

例:

import static ru.package.Modules.*;

public enum Injectors {

FOO_INJECTOR(BarModule.module()),

FOO2_INJECTOR(FOO_INJECTOR.injector(),
        Bar2Module.module(), FooModule.module());

private final Injector m_injector;

Injectors (Module... modules) {
    m_injector = Guice.createInjector(modules);
}

Injectors (Injector parentInjector, Module... modules) {
    m_injector = parentInjector.createChildInjector(modules);
}

public Injector injector() {
    return m_injector;
}
}
Run Code Online (Sandbox Code Playgroud)

dependency-injection guice

4
推荐指数
2
解决办法
4559
查看次数

如何像Class <Foo <T >>实例化泛型变量?

我需要像Class>那样实例化泛型变量.例如,

Class<? extends List<String>> = ...
Run Code Online (Sandbox Code Playgroud)

变式1:

Class<? extends List<String>> clazz = LinkedList.class;
Run Code Online (Sandbox Code Playgroud)

不工作 - "不兼容的类型".

变式2:

Class<? extends List> clazz = LinkedList.class;
Run Code Online (Sandbox Code Playgroud)

工作,但在这种情况下,List是原始类型 - 不好.

如何实例化这样的变量?

java generics

1
推荐指数
1
解决办法
711
查看次数

标签 统计

dependency-injection ×2

guice ×2

generics ×1

java ×1