如何在JavaSpring运行时自动连接对象,因为它有多个子类?

np8igboo  于 2021-07-15  发布在  Java
关注(0)|答案(2)|浏览(207)

例如:我有一个像

class TestAnimal {

    @Autowired
    @Qualifier("animal")
    private @IAnimal animal;

    void hanlde (){
        animal.some();
    }
}
interface IAnimal {
    void some();
}

@Component
class Lion implements IAnimal{
    void some(){}
}

@Component
class Tiger implements IAnimal{
    void some(){}
}

@Component
class Hippo implements IAnimal{
    void some(){}
}

当我运行服务器时,我遇到了如下异常
原因:org.springframework.beans.factory.nouniquebeandefinitionexception:没有类型为“com.test.animal”的合格bean可用:需要单个匹配bean,但在org.springframework.beans.factory.config.dependencyscriptor.resolvenotunique(dependencyscriptor)找到3:lion,tiger,hippo。java:173).
如何解决这个问题。有没有办法创建运行时对象初始化?

cygmwpex

cygmwpex1#

spring不知道该注入哪个bean。你的代码里有三个豆子:狮子、老虎和河马。因此在animal字段上方,您应该选择要用@qualifier注解注入哪个bean。e、 如果是狮子,你必须写@qualifier(“狮子”)。同时删除“private@ianimal animal;”行中的@
如果你想动态自动连线,你应该看看https://www.baeldung.com/spring-dynamic-autowire.

7z5jn7bk

7z5jn7bk2#

您需要在限定符注解(“lion”、“tiger”、“hippo”)上编写实现名称,而不是抽象类/接口。

相关问题