自动装配分层bean

时间:2012-10-24 21:32:42

标签: spring

这是我的情景。我有两个课程 ClassA ClassB ClassB 继承 ClassA 。 我正在对它们使用@Component注释使它们成为Spring bean。

@Component
public class ClassA{
    // parent
}

@Component
public class ClassB extends ClassA{
    // child
}

public class ClassC{

    @Autowired
    private ClassA classA;

    public void doSomething(){

    }
}

现在,每当我尝试在 ClassC 中使用@autowired注释来注入 ClassA 时,如上所示,我会得到以下异常。

  

没有定义[ ClassA ]类型的唯一bean:预期的单个匹配bean但找到2:[ classA classB ]

据我所知,当按类型自动连接时,spring会找到两个可分配给 ClassA 的bean,因此会引发异常。

除了使用@Qualifier注释和按名称自动连接外,还有一种简单的方法可以解决此问题吗?

我可以指示spring不仅要检查可按类型分配的bean,还要检查它是否是完全相同的类类型?

1 个答案:

答案 0 :(得分:2)

是的,请使用@Primary注释。

如果这不可行并且您不想使用@Qualifier,则必须手动解决它。类似的东西:

@Autowired
private List<ClassA> candidates;

private ClassA actual;

@PostConstruct
public void postConstruct() {
    for (ClassA candidate : candidates) {
        if (AopProxyUtils.ultimateTargetClass(candidate).equals(ClassA.class)) {
            actual = candidate;
            break;
        }
    }
    org.springframework.util.Assert.notNull(actual , "No bean of exact type ClassA found.");
}