refresh是一个方法,spring中所有的ApplicationContext容器都需要通过refresh方法初始化;
其中refresh方法包含12个主要的处理步骤:
1、第1个步骤做前置准备
2、第2~6步骤创建BeanFactory(ApplicationContext核心功能由BeanFactory完成)
3、第7~12准备ApplicationContext,其中11步创建初始化容器中的单例bean;
这个过程创建准备Environment对象
Environment对象存储了java和系统的一些键值信息;
最重要的是存储我们自定义配置的application.properties;
总结
解析@value注解配置的值
BeanFactory通过BeanDefinition收集信息后创建bean
我们可以看到beandefinition初始为空;
我们接着在xml中配置bean
可以看到beandifinition已经不为空;
也可通过配置类配置bean
也可以看到bean被注入了进来;
这一步是空实现,留给子类扩展
模板方法的设计模式
beanFactory的后处理器,充当BeanFactory扩展点;
可以用来补充修改BeanDefinition;
ConfigurationClasProcessor解析@Configuration @Bean import等补充到bean的map中;
加入更多的后处理器;
这一步只是注册,后续步骤才会使用;
实现国际化;
容器中有messageSource,如果没有在map中找到,会自动创建;
事件广播器,发送事件给监听器;
通过ApplicationContext的publishEvent(事件对象)来发布;
空实现,留给子类;
springboot中的子类在这准备webserver,即内嵌web容器;
initApplicationEventmulicaster管理发送监听事件,这里管理接收事件;
需要实现ApplicationListerer,重写相关方法;
上一篇:你真的会在阳光下拍照片么?