下面我们就用一个例子大略的先容一下它的用法。
java代码:
xml配置文件:

运行结果为:
Autowired的BeanPostProcessor是如何被启用的?
看了Autowired表明的大略用法,接下来就开始剖析一下它的实现事理。
我们先从这个xml配置文件入手,从中我们可以看到统共干了两件事情:
添加了annotation-config标签定义了测试用的两个Bean定义两个测试用的Bean好理解,那么这个annotation-config标签又是干嘛用的呢?
根据之前的一篇文章剖析的内容,我们可以知道这个是一个自定义的xml标签(玩转Spring XML配置文件的Namespace,带你一起剖析它的实现事理)。按照之前文章的剖析过程,可以找到AnnotationConfigBeanDefinitionParser这个类,在这个类中会定义一些表明配置干系的bean。前面提到的AutowiredAnnotationBeanPostProcessor也是在这里被定义的。
属性是如何被注入到Bean里去的?
接下来我们一起剖析一下AutowiredAnnotationBeanPostProcessor这个类,我们从中可以找到这个方法:
大略的剖析后可以知道,这个方法便是用来给bean注入属性值的,这个方法在创建bean的时候会被调用。
这个方法的代码是比较大略的,大体上就干了两件事情:
查找并构建须要注入的元数据注入属性接下来我们就对这两个过程进行进一步的剖析。
注入元数据的构建过程所谓的注入元数据便是一些InjectedElement的工具实例,构建的过程便是遍历对应的Bean中的Field和Method,然后创建对应的InjectedElement实例。
注入元数据的构建过程是比较大略的,但是代码较长,这里就不贴代码了,下图是全体构建元数据的流程:
从上面的元数据创建过程我们知道,一共有两种类型的元数据会被创建:AutowiredFieldElement和AutowiredMethodElement,从名称上我们也可以很清楚的知道它们分别对应着Field的注入和通过方法进行注入。
属性注入过程Field和Method的注入过程整体大体上都是一样的:
通过beanFactory获取须要注入的bean通过反射注入属性它们之间的紧张差异为:
Method的办法注入的时候,会判断一下是否已经通过property列表注入过了(XML定义Bean的时候可以通过property标签注入属性),如果已经注入过了,表明注入的办法会Method注入可以同时注入多个属性布局方法的注入过程还有一类分外的自动注入过程,那便是在布局方法中直接注入相应的属性,这也是高版本的Spring中推举的注入方法。由于这个注入过程和上面所讲的注入过程有比较大的差异,以是将会放在其余一篇文章中单独先容。
干系阅读:
玩转Spring XML配置文件的Namespace,带你一起剖析它的实现事理
玩转Spring XML配置文件的Namespace,只要这篇文章就够了
Spring Bean初始化回调的各种用法你真的懂吗?快来看看吧!
对Spring实现事理感兴趣的朋友可以点个关注,接下来的一段韶光我将会从Spring的源代码入手,详细的先容Spring的实现事理。
知其然,更要知其以是然,方能交融贯通!