我有一个特定的问题,我不能使用@Qualifier
,因为我需要在父类中使用bean。我的想法是删除baseComponent
属性,并在BaseController
中创建一个抽象方法,例如getComponent()
,然后为BaseComponent
返回所需的bean ...但也许有一种更干净的方法可以通过配置来实现。
@RestController
public abstract class BaseController {
@Autowired
private BaseComponent baseComponent;
@GetMapping("/something")
public void doSomething() {
baseComponent.printSomething();
}
}
@RestController
@RequestMapping(value = "/foo")
public class FooController extends BaseController {
}
@RestController
@RequestMapping(value = "/bar")
public class BarController extends BaseController {
}
public interface BaseComponent {
void printSomething();
}
@Component
public class FooComponent implements BaseComponent {
@Override
public void printSomething() {
System.out.println("foo!");
}
}
@Component
public class BarComponent implements BaseComponent{
@Override
public void printSomething() {
System.out.println("bar!");
}
}
您可以通过以下方式进行
import org.springframework.beans.factory.BeanFactory;
@RestController
public abstract class BaseController {
@Autowired
private BeanFactory beanFactory;
@GetMapping("/something")
public void doSomething() {
BaseComponent baseComponent = beanFactory.getBean("Foo", // or "Bar"
BaseComponent.class);
baseComponent.printSomething();
}
}
@Component("Foo")
public class FooComponent implements BaseComponent {
...
}
@Component("Bar")
public class BarComponent implements BaseComponent{
...
}
如果我正确理解您想要的东西。