Java Guice向类构造函数注入对象
我刚开始找Guice做一个新项目。我有类似的东西 ConfigImpl类ans配置接口Java Guice向类构造函数注入对象,java,dependency-injection,guice,Java,Dependency Injection,Guice,我刚开始找Guice做一个新项目。我有类似的东西 ConfigImpl类ans配置接口 interface Config{...} class ConfigImpl implements Config { private static final Map<> propMap; public ConfigImpl(Map<> propMap) { this.propMap = someProps; } } 最后 public SomeC
interface Config{...}
class ConfigImpl implements Config {
private static final Map<> propMap;
public ConfigImpl(Map<> propMap) {
this.propMap = someProps;
}
}
最后
public SomeClass {
Config someConfig;
Injector injector = Guice.createInjector(new MyInjector());
someConfig = injector.getInstance(Config.class);
}
现在我非常困惑,因为我找不到将propMap传递到ConfigImpl类的方法。我想知道用Guice做这件事的正确方法。谢谢 您应该从模块中插入
propMaps
:
public class MyInjector extends AbstractModule {
private final Map<String,String> mapProps;
public MyInjector(Map<String,String> mapProps) {
this.mapProps = mapProps;
}
protected void configure() {
bind(Config.class).to(ConfigImpl.class).in(Scope.SINGLETON); // You most than likely want this
bind(new TypeLiteral<Map<String,String>>() {}).toInstance(mapProps); // binding for the map.
}
}
您应该从模块中插入
propMaps
:
public class MyInjector extends AbstractModule {
private final Map<String,String> mapProps;
public MyInjector(Map<String,String> mapProps) {
this.mapProps = mapProps;
}
protected void configure() {
bind(Config.class).to(ConfigImpl.class).in(Scope.SINGLETON); // You most than likely want this
bind(new TypeLiteral<Map<String,String>>() {}).toInstance(mapProps); // binding for the map.
}
}
public class SomeClass {
void doSomething() {
Map<String,String> mapProps = ... ;
Injector injector = Guice.createInjector(new MyInjector(mapProps));
Config someConfig = injector.getInstance(Config.class);
}
}
class ConfigImpl implements Config {
private final Map<String,String> propMap;
@Inject // mandatory since you use a non-default constructor
public ConfigImpl(Map<String,String> propMap) { // add the generic type of the map
this.propMap = propMap;
}
}