spring启动扫描业务组件时机

AbstractApplicationContext    refresh()方法 515行  获取新的IOC 容器

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

refreshBeanFactory() 调用子类AbstractRefreshableApplicationContext的方法

AbstractRefreshableApplicationContext类的第129行加载beanDefinition

因为是基于注解,这里看AnnotationConfigWebApplicationContext类的loadBeanDefinitions方法

第219行scanner.scan(StringUtils.toStringArray(this.basePackages));

继续看ClassPathBeanDefinitionScanner的247行scan方法

scan方法中doScan(basePackages);根据basePackages扫描业务类

ClassPathBeanDefinitionScanner的268行doScan()方法

Set<BeanDefinition> candidates = findCandidateComponents(basePackage);

将扫描到的组件都包装成BeanDefinition类型

在doScan()方法288行registerBeanDefinition(definitionHolder, this.registry);将扫描到的Bean定义添加到IOC容器

 

总结:Spring容器在启动的时候,先会保存所有注册进来的Bean的定义信息;

        1、xml注册bean;<bean>
        2、注解注册Bean;@Service、@Component、@Bean、xxx

      2)、Spring容器会合适的时机创建这些Bean
        1、用到这个bean的时候;利用getBean创建bean;创建好以后保存在容器中;
        2、统一创建剩下所有的bean的时候;finishBeanFactoryInitialization();
      3)、后置处理器;BeanPostProcessor
        1、每一个bean创建完成,都会使用各种后置处理器进行处理;来增强bean的功能;
            AutowiredAnnotationBeanPostProcessor:处理自动注入
            AnnotationAwareAspectJAutoProxyCreator:来做AOP功能;
            xxx....
            增强的功能注解:
            AsyncAnnotationBeanPostProcessor
            ....
    4)、事件驱动模型;
        ApplicationListener;事件监听;
        ApplicationEventMulticaster;事件派发:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值