@Autowired& Spring上下文层次结构

时间:2014-07-02 10:51:06

标签: java spring spring-mvc dependency-injection

假设我已经获得了应用程序上下文层次结构:A(父),B(扩展A),C(扩展A)。 假设我现在写了类似@Autowired private MyBean myBean

的内容

问题: 在哪里Spring会查找myBean?换句话说,它在什么样的背景下呢?假设bean在所有3个上下文中都存在..

3 个答案:

答案 0 :(得分:3)

这取决于您的MyBean被引用的上下文。

请参阅以下方案:

让我们假设在Bean ReferencingBean中引用了MyBean。

场景1: 如果ReferencingBean在上下文A中,则autowire将从上下文A中获取MyBean。

场景2: 如果ReferencingBean在上下文B中,则autowire将从上下文B获得MyBean。

场景3: 如果ReferencingBean在上下文C中,则autowire将从上下文C获得MyBean。

子上下文bean不能交叉引用。这意味着,如果ReferencingBean在上下文B中,则它不能看到上下文C,反之亦然。

答案 1 :(得分:0)

  

@Autowired注释通过匹配数据类型自动连接bean。

因此,在您的情况下,它将查找类型为MyBean的bean。

它将始终首先查看当前的应用程序上下文。当给定的ApplicationContext无法解析bean时,它会将解析请求传递给其父级。因此,它将从您拥有@Autowired private MyBean myBean

的应用程序上下文开始

答案 2 :(得分:0)

两者都有。如果bean定义了两次,首先在A中然后在B中,B将覆盖A.另请参阅此答案https://stackoverflow.com/a/4250093/1937263

相关问题