spring源码笔记

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:

spring源码笔记_第1张图片


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

你可能感兴趣的:(spring源码笔记)