在Spring中,有什么方法可以知道从父类中使用什么bean?

问题描述 投票:0回答:1

我有一个特定的问题,我不能使用@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!");
    }

}
java spring-boot dependency-injection inversion-of-control
1个回答
0
投票

您可以通过以下方式进行

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{
...

}

如果我正确理解您想要的东西。

© www.soinside.com 2019 - 2024. All rights reserved.