Sring:
// 准备刷新的上下文
prepareRefresh();
//初始化BeanFactory,并进行xml文件读取
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// 对 bean factory 进行功能填充
prepareBeanFactory(beanFactory);
try {
// 子类覆盖方法做额外处理
postProcessBeanFactory(beanFactory);
// 激活各种BeanFactory处理器
invokeBeanFactoryPostProcessors(beanFactory);
// 注册拦截Bean 创建的Bean处理器,这里只是注册,真正调用是在getBean
registerBeanPostProcessors(beanFactory);
// Initialize message source for this context.
initMessageSource();
//初始化应用消息广播器,并放入 “applicationEventMulticaster” bean 中
initApplicationEventMulticaster();
// 留给子类来初始化其它的Bean.
onRefresh();
// 在所有注册的bean中查找 Listener bean,注册到消息广播器中
registerListeners();
// 初始化剩下的单实例(非惰性的)
finishBeanFactoryInitialization(beanFactory);
// 完成刷新过程,通知生命周期处理器 lifecycleProcessor 刷新过程,同时发出 ContextRefreshEvent 通知别人
finishRefresh();
}
doCreateBean:
BeanPostProcessor(后处理Bean) : 执行postProcessBeforeInitialization/postProcessAfterInitialization,BeanPostProcessor接口提供钩子函数,用来动态扩展修改Bean。(程序自动调用后处理Bean)
InitialingBean:提供了一个唯一的方法afterPropertiesSet(),在Bean属性都设置完毕后调用afterPropertiesSet()方法做一些初始化的工作
DisposableBean:提供了一个唯一的方法destory(),在Bean生命周期结束前调用destory()方法做一些收尾工作
SpringMvc:
请求处理流程跟踪:
RequestMappingHandlerMapping 。initHandlerMethods
1、在bean初始化时,解析@Controller、@RequestMapping
2、获取方法mapping信息,生成 url <-> HandlerMethod 映射信息
3、DispatcherServlet 根据请求url获取映射 HandlerMethod ,同时获取interceptor
4、执行interceptor preHandle方法
5、RequestMappingHandlerAdapter。invokeHandlerMethod 调用
1)、获取参数和validators的对象:WebDataBinder
2)、validate校验
3)、InvocableHandlerMethod。doInvoke 调用方法,返回结果
4)、HttpMessageConverter 转化返回结果(ResponseBody才有,非ModelAndView)
6、执行interceptor afterCompletion方法
spring-mybatis
mybatis-spring 框架就是利用 BeanDefinitionRegistryPostProcessor 通过编码的方式往 spring 容器中添加 bean
SqlSessionFactoryBean
bean初始化时解析配置目录下的mapper xml,生成一个个的MapperProxy对象,代理mapper