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容器
总结:业务组件在创建beanFactory时就被扫描到容器中了