很久没写博客了,今天失踪人口回归

这是一个原始的Spring IOC容器启动方法,我们需要AnnotationConfigApplicationContext这个类有如下几个步骤
1.创建构造方法,根据我们所传入的AppConfig配置类上的@ComponentScan(value ="com.zhongyu")得到扫描路径


2.扫描该路径下的所有带@Component注解的类,这里说一下Spring的懒加载机制,默认Spring只会扫描生成没有懒加载注解的单例Bean,原型Bean(每次调用都重新生成一个Bean)是不加载的,所以在这一步Spring需要判断@Component或者@Bean修饰的类,将扫描到的类解析成BeanDefinition(Bean定义),存入BeanDefinitionMap,在BeanDefinitionMap判断Bean是不是单例Bean,如果是那么就确认需要在启动时生成Bean,通知BeanFactory根据我们的BeanDefinition生成我们需要的Bean,注意这里扫描的不是我们的源代码路径,而是扫描的编译过后的class文件路径,在这一步做了很多路径上的转换比如\\转.
3.后面的流程大致是无参构造方法->创建普通对象->填充属性->初始化前->初始化->初始化后(AOP)->代理对象->Bean的一个过程
后面再补齐后面的流程的详细过程,感谢阅读
网友评论