如何选择将什么实现注入到自动装配的构造函数中
How to choose what implementation get's injected in to an autowired constructor
假设我有一个接口
interface IPerson {...}
我有这个接口的两个实现
@Component
class Programmer implements IPerson {...}
@Component
class LionTamer implements IPerson {...}
假设我有一个使用 Autowire 注入的 class
@Component
class SomethingThatDoesStuff {
@Autowired
public SomethingThatDoesStuff (IPerson someone) {
...
}
}
Spring 如何知道要注入什么实现?有没有办法告诉 spring 要注入什么实现?这可以通过注释来完成,还是我必须定义某种工厂?如果有怎么办?
如@passion 所述,您应该使用 bean 命名 (standard Spring IoC feature):
@Component("programmer")
class Programmer implements IPerson {...}
@Component("lionTamer")
class LionTamer implements IPerson {...}
@Component
class SomethingThatDoesStuff {
@Autowired
public SomethingThatDoesStuff (@Qualifier("programmer") IPerson someone) {
...
}
}
假设我有一个接口
interface IPerson {...}
我有这个接口的两个实现
@Component
class Programmer implements IPerson {...}
@Component
class LionTamer implements IPerson {...}
假设我有一个使用 Autowire 注入的 class
@Component
class SomethingThatDoesStuff {
@Autowired
public SomethingThatDoesStuff (IPerson someone) {
...
}
}
Spring 如何知道要注入什么实现?有没有办法告诉 spring 要注入什么实现?这可以通过注释来完成,还是我必须定义某种工厂?如果有怎么办?
如@passion 所述,您应该使用 bean 命名 (standard Spring IoC feature):
@Component("programmer")
class Programmer implements IPerson {...}
@Component("lionTamer")
class LionTamer implements IPerson {...}
@Component
class SomethingThatDoesStuff {
@Autowired
public SomethingThatDoesStuff (@Qualifier("programmer") IPerson someone) {
...
}
}