240 发简信
IP属地:安徽
  • 这篇帖子也有好几年了,不知道作者还关不关注。(评论也是思考,勿抄)

    想特别指出的与本文标题无关,而是作者写的“自动装配的坑”这里。
    因为这不是坑,这只是不了解;而且看评论有的也测试了这部分并发出了疑问,我感觉问出来的问题就不是很对,偏了,想说明一下。

    大概过程:

    1.在第一个xml配置文件里,作者开启了注解处理,即context:annotation-config标签,然后在ListHolder类中的属性上标出了@Autowired注解。这个部分的源码体现在:
    1)在AbstractAutowireCapableBeanFactory#createBean方法里调用了applyMergedBeanDefinitionPostProcessors,这里涉及了@PostConstruct、@Destroy、@Autowired、@Value、@Resource等注解的解析。关于@Autowired的关键类是AutowiredAnnotationBeanPostProcessor,关键方法是postProcessMergedBeanDefinition。
    (关于BeanPostProcessor及其子接口,以及各接口方法调用时机可自行参考其他资料)

    2.在后来bean的属性填充阶段(即populateBean方法中),会再次调用BeanPostProcessor的postProcessProperties方法,这里AutowiredAnnotationBeanPostProcessor#postProcessProperties方法会将前面步骤中解析出的相关字段、方法等一一取出来做解析注入,详细可看源码,很清楚。

    3.在步骤1里,是对所有属性和方法进行解析,并不会看ignoreXXX,所以怎么设置,步骤2都不会影响注入。

    上面是对autowired的解释。
    ------------------------------------------------------------------------------------------------
    下面是对配置文件中autowire的解释:
    作者的第二个例子里,说的是自己写的一种正确的方式,没错,写的正确,但我觉得配文欠妥。

    1.<beans>作为最外层的根标签,它的default-autowire标签是一种默认行为,即该xml配置文件中的所有bean标签都将遵循由default-autowire指定的autowire model。
    而,默认的,在不配置default-autowire和<bean>标签的autowire属性时,<bean>标签的autowire默认为NO,即不装配。例子中只是给所有的bean都指定了一种装配方式而已。所以例子正确,但是理解上不对,希望更正。“发现英语中的autowiring特定指的是通过beans标签default-autowire属性来依赖注入的方式,而不是指使用@Autowired注解进行的依赖注入”。你不能说特指default-autowire,也不能就把@Autowired给除开了...

    最后,有个需要注意的点,也很重要,就是自动装配的顺序。
    1.BeanPostProcessor#postProcessAfterInstatiation
    2.如果指定了autowire,则执行autowireByName或者autowireByType
    3.BeanPostProcessor#postProcessProperties,这里有@Autowired注解的解析
    4.applyPropertyValues在配置文件中我们会通过<property>标签指定属性,在这里会有处理

    步骤2例在进行autowire时,也是将解析好的属性值放入了一个叫PropertyValues的对象里的,此时还没有进行真正的属性赋值,等到步骤4才会应用这些值。在步骤4执行的时候,会覆盖步骤3里已经通过@Autowired注解进行注入的值。

    打开BeanFactory ignoreDependencyInterface方法的正确姿势

    在阅读Spring容器扩展部分源码的过程中,我了解到BeanFactory接口中有个方法叫ignoreDependencyInterface。从官方文档的“字面”来看,其作用...

  • React学习之前言

    React 是一个采用声明式,高效而且灵活的用来构建用户界面的框架。 学习的第一件事,当然是通过它的 HelloWorld 去了解,在通篇看完官网的井字棋入门教程和阮一峰关于...

  • 120
    电商指标解读02---SKU,SPU

    SKU: stock keeping unit (库存单位) SKU=stock keeping unit(库存量单位),SKU即库存进出计量的单位, 可以是以件、盒、托盘等...

  • 120
    生成器

    PHP Manual手册对于生成器的概述:PHP Manual Generator PHP Manual手册新特性中关于生成器的描述:PHP新特性 对生成器及其应用场景比较详...

  • 常用函数小结(一)

    2019/1/18 数组函数: current()- 返回数组中的当前单元 next()- 将数组中的内部指针向前移动一位 key() - 返回数组中当前单元的键名 arra...

  • 120
    维护模式

    启用维护模式,只需执行 Artisan 命令 down : php artisan down 命令解析如下: 选项: message:可用于显示或记录自定义消息 retry:...