在 Guice 中注入一个对象数组需要使用 Multibinder
类。Multibinder
允许您将多个实例绑定到一个数组或集合中。以下是如何使用 Multibinder
注入一个对象数组的示例:
MyService
,它将作为我们要注入的对象数组的元素类型:public interface MyService {
void doSomething();
}
MyService
接口的类:public class ServiceA implements MyService {
@Override
public void doSomething() {
System.out.println("Service A is doing something");
}
}
public class ServiceB implements MyService {
@Override
public void doSomething() {
System.out.println("Service B is doing something");
}
}
public class MyModule extends AbstractModule {
@Override
protected void configure() {
Multibinder<MyService> myServiceSetBinder = Multibinder.newSetBinder(binder(), MyService.class);
myServiceSetBinder.addBinding().to(ServiceA.class);
myServiceSetBinder.addBinding().to(ServiceB.class);
}
}
@Inject
注解:public class MyApp {
@Inject
private Set<MyService> myServices;
public void run() {
for (MyService service : myServices) {
service.doSomething();
}
}
}
在这个示例中,我们创建了一个 MyService
接口和两个实现类 ServiceA
和 ServiceB
。我们在模块中使用 Multibinder
将这两个实现类绑定到一个集合中。最后,在 MyApp
类中,我们使用 @Inject
注解将这个对象数组注入到 myServices
变量中。
注意,在这个示例中,我们使用了集合(Set
)来存储注入的对象数组。这是因为集合可以确保每个元素只出现一次,而数组可能会有重复元素。如果您需要使用数组,可以使用 Multibinder
的 addBinding
方法将每个实现类绑定到数组中,并在需要注入的类中使用 @Inject
注解一个数组类型的变量。
领取专属 10元无门槛券
手把手带您无忧上云