如何将几个类注入方法(guice)?

时间:2011-12-29 22:19:06

标签: java reflection guice

我有三个班级(例如)

Buick implements Vehicle
Chevy implements Vehicle
Ferrari implements Vehicle

我有一个方法

travelTo(ZipCode start, Zipcode end) 
for(Class<Vehicle> v : vehicleInstances)
{
     Vehicle car= v.getconstructor(ZipCode.class, ZipCode.class).newInstance(start,end).newInstance(start,end);

     car.drive();
}

我想通过使用Guice注入这些类(而不是使用丑陋的类名称或类名称枚举)。我该怎么做

1 个答案:

答案 0 :(得分:3)

看看Guice Multibinder。它可以为您注入Set<Vehicle>

http://google-guice.googlecode.com/svn/trunk/latest-javadoc/com/google/inject/multibindings/Multibinder.html

编辑:你可能仍然需要将它作为成员变量或构造函数注入。

编辑:添加了示例代码。在没有IDE的情况下执行此操作,因此可能需要进行一些调整。

 public class YourModule extends AbstractModule {
    protected void configure() {
      Multibinder<Vehicle> multibinder
         = Multibinder.newSetBinder(binder(), Vehicle.class);
      multibinder.addBinding().to(Buick.class);
      multibinder.addBinding().to(Chevy.class);
      multibinder.addBinding().to(Ferrari.class);
   }
 }

 public class YourInterestingClass {
   private final Set<Vehicle> vehicles;

   @Inject
   public YourInterestingClass(Set<Vehicles> vehicles){
     this.vehicles = vehicles;
   }

   public void doSomethingWithVehicles(){
     for(Vehicle vehicle: vehicles){
       // do something
     }
   }
 }