栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring系列源码简要分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring系列源码简要分析

spring ioc



参考链接

以通过xml实例化spring的过程来分析:
核心方法入口 ClassPathXmlApplicationContext .refresh

    bean容器初始化,初始化完成后会形成一个 beanName-> beanDefinition 的 map
    (方法入口:ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
    bean容器的初始化动作在ApplicationContext的实现类中)
    * applicationContext持有一个实例化的DefaultListableBeanFactory容器类对象(容器对象实例化)
    * 解析xml配置文件,把配置文件转换成一个个BeanDefinition,保存到map中

    bean实例化(由beanFactory负责,spring启动时实例化所有的singleton 非lazy的bean
    方法入口:finishBeanFactoryInitialization(beanFactory);beanFactory.getBean();doGetBean();createBean();doCreateBean())

    实例化bean :instanceWrapper = createBeanInstance(beanName, mbd, args);bean属性装配(三层缓存解决bean循环依赖问题):populateBean(beanName, mbd, instanceWrapper);bean初始化完成的回调:exposedObject = initializeBean(beanName, exposedObject, mbd);
    实现了aware接口的回调:invokeAwareMethods(beanName, bean);
    BeanPostProcessor 的 postProcessBeforeInitialization 回调:wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
    InitializingBean 接口或init-method:invokeInitMethods(beanName, wrappedBean, mbd);
    BeanPostProcessor 的 postProcessAfterInitialization 回调:wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);

bean循环依赖的三层缓存
singletonFactories : 单例对象工厂的cache
earlySingletonObjects :提前暴光的单例对象的Cache
singletonObjects:单例对象的cache

aop

BeanPostProcessor后置处理器,
AbstractAutoProxyCreator 实现的 postProcessAfterInitialization() 方法,实现对bean的增强(动态代理)

aop源码参考资料

spring mvc

方式一:web容器启动,实例化spring容器和spring mvc容器
web容器启动加载spring mvc

web容器启动时,

    初始化Listener,执行contextinitialized
    web.xml listener中配置spring 容器的初始化执行类,作为listener被web容器加载初始化,并放入servletContext。(父容器)初始化filter,执行init方法初始化serlet,执行init方法
    可以配置容器初始化时,就实例化配置的servlet,web.xml中配置spring mvc的dispatcherSerlet,加载spring mvc容器。(子容器,并设置父容器为spring容器)

spring mvc源码分析
前端控制器DispatchServlet
处理器映射器HandleMapping
处理器适配器HandleAdpter
视图解析器ModelAndView

方式二:spring boot内置web容器时,实例化spring容器,通过子类扩展启动web容器
spring boot内存web容器启动
5. 根据classpath下存在的类判断时应该加载那种applicationContext (spring mvc/webflux mvc/default)
6. 调用spring初始化的refresh方法,先初始化beanFactory容器(beanDefinition);在子类实现onfresh方法,onfresh方法中创建并启动web容器,根据spring facoties spi机制获取指定的web容器bean(tomcat/jetty/undertow等),初始化web容器(包含注入servlet3.0标准的内容listener/fliter/servelt,如spring mvc的dispatcherServlet),启动web容器
7. 继续实例化其他的spring bean

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号