羽化登峰

导航

 

一、在xml中配置component-scan

<context:component-scan base-package="包路径"/>

  从上一章节学习,可以找到标签解析类ComponentScanBeanDefinitionParser,首先取出包路径下的所有class类,
  

  ClassPathBeanDefinitionScanner中findCandidateComponents()筛选出符合条件(包含注解或者实现特定接口类)的所有class类,再将符合条件的Bean加入BeanDefinition中
  

二、利用ConfigurationClassPostProcessor
  在使用BeanFactoryPostProcessor过程中,会实例化ConfigurationClassPostProcessor并调用postProcessBeanDefinitionRegistry()方法,循环遍历BeanFactory中已经存在的BeanDefinition,从中找出包含注解存放到configCandidates集合中。    
  

  创建ConfigurationClassParser解析器,调用解析器parse()方法,对BeanDefinition增改,完成不同注解的扫描
  

  第一步解析@Component其中@Configuration继承了@Component,所以也会被解析
  

  然后依次是@PropertySource@PropertySources、@ComponentScan@ComponentScans、@Import、@Bean、实现接口
  重要的@Import,在springboot中大量运用,很多注解继承了Import注解,当解析到Import注解时,会将注解类解析成BeanDefinition,判断该类的类型,做不同的处理
  

  其中@Configuration并且配置proxyBeanMethods=true会在postProcessBeanFactory()操作,会对加有该注解的类进行代理。  
  

 

posted on 2022-02-24 12:08  默默攀岩  阅读(90)  评论(0)    收藏  举报