假设我已经获得了应用程序上下文层次结构:A
(父),B
(扩展A),C
(扩展A)。
假设我现在写了类似@Autowired private MyBean myBean
问题: 在哪里Spring会查找myBean
?换句话说,它在什么样的背景下呢?假设bean在所有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