spring容器启动:
首先生成一个beanfactory,一个beandefinitionreader,一个pathscanner,然后主要生成两个对象,一个configurationClasspostprocessor和一个AutowiredAnnotationBeanPostProcessor,前者是一个beanfactory后置处理器,可以修改beanDefinition的内容,主要用来读取用import Configuration componentScan等注解标记的类,然后读取其中的bean,并循环读取。后者用来autowired自动装配。
然后开始refrush//生命周期
首先是实例化,简单来说就是调用无参构造申请内存地址,然后是属性注入,如果实现了aware接口,要调用这些函数,如果实现了beanPostProcessor接口,调用before,然后是init-method,接下来调用after方法,最后如果自定义了销毁方法,再运行销毁方法。
自动装配
@AutoConfigurationPackage
@importSelector
importSelector返回的是一个字符串组,每个字符串都是一个类,然后从spring.factories中找到这些字符串即可,返回之后找到这些类然后注册成beanDefinition,取的名字放在set里,然后以名字为key,beandefinition为value,放在map里面等待实例化。