spring启动扫描业务组件时机

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

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

spring启动扫描业务组件时机

refreshBeanFactory() 调用子类AbstractRefreshableApplicationContext的方法

spring启动扫描业务组件时机

AbstractRefreshableApplicationContext类的第129行加载beanDefinitionspring启动扫描业务组件时机

因为是基于注解,这里看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容器

 

 

 

总结:业务组件在创建beanFactory时就被扫描到容器中了