@Bean与@Component作用于同一个类

86 阅读1分钟

@Bean与@Component作用于同一个类谁的优先级高

结论

@Configuration中@Bean的优先级高

原因

bean的创建过程

  1. 扫描指定包下的文件,加载beanDefinition
  2. 执行beanFactoryPostProcessor
  3. 根据beanDefinition创建对象

关键点在于 执行beanFactoryPostProcessor

ConfigurationClassPostProcessor获取到所有的,组件类型的beanDefinition(包含@Component和@Configuration...), 获取到其内部的@Bean方法组成的列表进行循环, 每一个@Bean方法都会对应一个新的BeanDefinition对象, 将这个对象进行注册, 这里注册之后会把以前扫描包时注册的beanDefinition给覆盖掉

后续通过benaDefinition创建对象时,就会以@Bean对应的beanDefinition对象进行创建 以该对象创建时不是执行构造方法而是执行@Bean所对应的方法

完结撒花

大致就是这么一个逻辑,可以看一下源码加深理解,不想看也可以记一下结论

image.png

image.png

image.png 一个简单的@Component修饰的类,没有@Bean那么第二步执行@Bean方法列表时就不会执行

image.png