Java Guice可以从类文本实例化我的类吗?

Java Guice可以从类文本实例化我的类吗?,java,guice,Java,Guice,我正在使用Guice构建我的应用程序,我有一个特殊的情况。我有一个属性文件,其中包含接口和实现类的映射,例如- 接口=类 我想将interface.class绑定到implclass.class 这样,当我请求injector.getInstance(MyInterface.class)时,Guice可以返回Impl类的一个实例 这可能吗 : 要获取给定类名字符串的类,请使用 : 要获取给定类名字符串的类,请使用 你可以做一些非常简单的事情,比如: 类模块扩展了抽象模块{ 属性; 模块(属性){

我正在使用Guice构建我的应用程序,我有一个特殊的情况。我有一个属性文件,其中包含接口和实现类的映射,例如-

接口=类

我想将interface.class绑定到implclass.class

这样,当我请求injector.getInstance(MyInterface.class)时,Guice可以返回Impl类的一个实例

这可能吗

要获取给定类名字符串的类,请使用


要获取给定类名字符串的类,请使用

你可以做一些非常简单的事情,比如:

类模块扩展了抽象模块{ 属性; 模块(属性){ 这个。属性=属性; } @凌驾 受保护的void configure(){ for(条目:properties.entrySet()){ 试一试{ Class abstractClass=Class.forName((字符串)entry.getKey()); 类实现=Class.forName((字符串)entry.getValue()); 绑定(抽象类).to(实现); }catch(classnotfounde异常){ //手柄e } } } } 请注意,属性文件需要包含完全限定的类名,这样才能工作。我注意到你的问题使用了简短的类名。请查看以添加对此的支持

Spring广泛支持基于XML的配置,这可能是一个更好的选择,具体取决于您要做什么。将绑定保存在代码中是很好的,因为它们在重构后仍然存在


如果您试图允许客户端向应用程序添加功能,则可能是更好的选择。

您可以做一些非常简单的事情,例如:

类模块扩展了抽象模块{ 属性; 模块(属性){ 这个。属性=属性; } @凌驾 受保护的void configure(){ for(条目:properties.entrySet()){ 试一试{ Class abstractClass=Class.forName((字符串)entry.getKey()); 类实现=Class.forName((字符串)entry.getValue()); 绑定(抽象类).to(实现); }catch(classnotfounde异常){ //手柄e } } } } 请注意,属性文件需要包含完全限定的类名,这样才能工作。我注意到你的问题使用了简短的类名。请查看以添加对此的支持

Spring广泛支持基于XML的配置,这可能是一个更好的选择,具体取决于您要做什么。将绑定保存在代码中是很好的,因为它们在重构后仍然存在


如果您试图允许客户端向您的应用程序添加功能,则可能是更好的选择。

我将类名作为字符串,而不是.class,因为它们是从属性文件加载的。我将类名作为字符串,而不是.class,因为它们是从属性文件加载的。尽管在与Guice中的Dhanji交换之后我的团队意识到实现这一点的最佳方法是使用模块,然后将它们定位在类路径上以自动创建注入器。虽然在与Guice团队的Dhanji进行交流后,我意识到实现这一点的最佳方法是使用模块,然后在类路径上找到它们以自动创建注入器。效果最好。
public class BillingModule extends AbstractModule {
  @Override 
  protected void configure() {
    bind(TransactionLog.class).to(DatabaseTransactionLog.class);
  }
}