我正在尝试使用Google Guice3.0进行轻量级DI。我想读取属性并将其转换为类类型并注入类。这是我的代码。
setting.properties
port = 31200
handler=com.mypackage.handler.MyHandler
Module
public class MyModule extends AbstractModule {
@Override
protected void configure() {
Properties properties = new Properties();
try {
properties.load(getClass().getResourceAsStream("setting.properties"));
Names.bindProperties(binder(), properties);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Singleton
public class MyServer {
@Inject @Name("port") int port;
@Inject @Name("handler") Class<? extends BaseHandler> handlerClass;
}
public interface BaseHanlder {
//
}
public MyHandler implements BaseHandler {
//
}
我想将属性中的handler属性转换为Class并将其注入MyServer。我怎样才能实现它?
提前致谢。
答案 0 :(得分:3)
就像@gontard所说的那样,Guice已经包含了类的转换器。
它使用Class.forName(fqn)来获取Class。
您可以使用Pluggable Type Converters see Binder#convertToTypes添加其他自定义转换器。
默认情况下,您拥有所有基元类型,枚举和类的转换器。有关实施细节,您可以看到here。