@Autowired
is actually perfect for this scenario. You can either autowire a specific class (implemention) or use an interface.
Consider this example:
public interface Item {
}
@Component("itemA")
public class ItemImplA implements Item {
}
@Component("itemB")
public class ItemImplB implements Item {
}
Now you can choose which one of these implementations will be used simply by choosing a name for the object according to the @Component
annotation value
Like this:
@Autowired
private Item itemA; // ItemA
@Autowired
private Item itemB // ItemB
For creating the same instance multiple times, you can use the @Qualifier annotation to specify which implementation will be used:
@Autowired
@Qualifier("itemA")
private Item item1;
In case you need to instantiate the items with some specific constructor parameters, you will have to specify it an XML configuration file. Nice tutorial about using qulifiers and autowiring can be found HERE.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…