如何在Google Guice 3.0中将String转换为类

时间:2013-03-15 02:02:24

标签: dependency-injection guice

我正在尝试使用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。我怎样才能实现它?

提前致谢。

1 个答案:

答案 0 :(得分:3)

就像@gontard所说的那样,Guice已经包含了类的转换器。

它使用Class.forName(fqn)来获取Class。

您可以使用Pluggable Type Converters see Binder#convertToTypes添加其他自定义转换器。

默认情况下,您拥有所有基元类型,枚举和类的转换器。有关实施细节,您可以看到here