首页 » 网站推广 » php注解注入道理技巧_Autowired注解都邑用那么你知道它实现自动注入的事理吗

php注解注入道理技巧_Autowired注解都邑用那么你知道它实现自动注入的事理吗

duote123 2024-12-19 0

扫一扫用手机浏览

文章目录 [+]

下面我们就用一个例子大略的先容一下它的用法。

java代码:

php注解注入道理技巧_Autowired注解都邑用那么你知道它实现自动注入的事理吗

xml配置文件:

php注解注入道理技巧_Autowired注解都邑用那么你知道它实现自动注入的事理吗
(图片来自网络侵删)

运行结果为:

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的实现事理。

知其然,更要知其以是然,方能交融贯通!

标签:

相关文章

php常量率低技巧_PHP 常量详解教程

PHP 常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。注释...

网站推广 2024-12-19 阅读0 评论0