让我们声明“ All Rocks have Minerals.
”:
public class Mineral
{
// Nevermind why a Mineral would have a GUID.
// This is just to show that each Mineral instance
// is universally-unique.
String guid;
@Inject
public Mineral(String id)
{
guid = id;
}
}
public class Rock
{
private Mineral mineral;
@Inject
public Rock(Mineral min)
{
mineral = min;
}
}
如果我们想要 2 个Rock
实例,每个实例都配置了不同的Mineral
实例(每个都有自己的 GUID):
public class RockModule extends AbstractModule
{
public void configure(Binder binder)
{
// Make two Minerals with different GUIDs.
Mineral M1 = new Mineral(UUID.getRandomId().toString());
Mineral M2 = new Mineral(UUID.getRandomId().toString());
// Configure two Rocks with these unique Minerals
Rock R1 = new Rock(M1);
Rock R2 = new Rock(M2);
// Define bindings
bind(Rock.class).toInstance(R1);
// No way for Guice to expose R2 to the outside world!
}
}
所以现在,当我们向 Guice 请求 a 时Rock
,它总是会给我们一个R1
实例,它本身就配置了 的M1
实例Mineral
。
在 Spring DI 中,您可以将两个 bean 定义为相同的类型,但只需给它们不同的 bean ID。然后,您使用它们的 ID 将 bean“连接”在一起。因此,我可以将它们连接在一起,R1
并在一起等等。然后,我可以根据需要向 Spring 索取它们。M1
R1
M2
R1
R2
使用 Guice,您只能询问您想要的类型Rock.class
( ),而不是实例。
您如何使用 Guice 请求不同的“有线豆”?通过使用不同的AbstractModule
结核?或者这是Guice的限制?