Spring @Autowired - 背景中发生了什么

时间:2012-08-31 01:16:08

标签: java spring annotations

对不起,如果已经讨论过,我找不到令人满意的答案。

我不明白当我在Springframework中创建一个bean并且@Autowired到另一个bean中的字段时发生了什么。我理解@Autowired和其他注释的结果,但我不知道Spring是如何完成的。

class Sample1{
    //
}

class Sample2{
@Autowired
Sample1 sample1Bean;
}

<bean id="sample1Bean" class="...Sample1"/>
<bean id="sample2Bean" class="...Sample2"/>

我的问题是spring如何在Sample2中设置字段sample1Bean?我不期待一个完整的解释,但我必须看的方向会很棒。感谢。

2 个答案:

答案 0 :(得分:3)

@Autowired@Inject注释由BeanPostProcessor解决 - 具体为AutowiredAnnotationBeanPostProcessor。这个bean后处理器拦截bean的创建(对于@Autowired在构造函数上的情况),bean的属性设置以确保所有自动装配的字段都被适当地设置。

答案 1 :(得分:2)

我不是春天的专家,但我会回答我所知道的。当一个Spring驱动的Web应用程序启动时,Spring框架将在应用程序上下文中进行bean实例化过程。在创建bean时,Spring会检查给定bean的必需依赖项。它根据所需的bean类型查找匹配的bean,并在指定@Autowired注释时自动装配它。

在上面的示例中,Spring将遍历应用程序上下文并创建类型为Sample1的bean(对象)。当它构造bean Sample2时,它会看到@Autowired注释,并将查找类型为Sample1的实例化bean。当它找到类型为Sample1的bean时,它将在Sample2上注入该bean并完成创建Sample2。这称为依赖注入,是Spring框架的一个非常流行的功能。

希望这会有所帮助。