想要深入的熟悉了解Spring源码,我觉得第一步就是要有一个能跑起来的极尽简单的框架,下面我就教大家搭建一个最简单的Spring框架,而且是基于Java Config形式的零配置Spring框架。

首先第一步创建一个空的maven web项目,这步很简单,自行百度。

在maven项目的pom.xml文件中添加Spring基础依赖:

        <properties>            <spring.version>4.3.7.RELEASEspring.version>            <slf4j.version>1.7.21slf4j.version>            <log4j.version>2.8.2log4j.version>            <logging.version>1.2logging.version>        properties>

        <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframeworkgroupId>                <artifactId>spring-framework-bomartifactId>                <version>${spring.version}version>                <type>pomtype>                <scope>importscope>            dependency>        dependencies>    dependencyManagement>

    <dependencies>        <dependency>            <groupId>org.springframeworkgroupId>            <artifactId>spring-contextartifactId>        dependency>        <dependency>            <groupId>org.springframeworkgroupId>            <artifactId>spring-webartifactId>        dependency>        <dependency>            <groupId>org.springframeworkgroupId>            <artifactId>spring-webmvcartifactId>        dependency>        <dependency>            <groupId>org.springframeworkgroupId>            <artifactId>spring-coreartifactId>        dependency>        <dependency>            <groupId>org.springframeworkgroupId>            <artifactId>spring-beansartifactId>        dependency>        <dependency>            <groupId>org.springframeworkgroupId>            <artifactId>spring-aopartifactId>        dependency>

        <dependency>            <groupId>org.apache.logging.log4jgroupId>            <artifactId>log4j-apiartifactId>            <version>${log4j.version}version>        dependency>        <dependency>            <groupId>org.apache.logging.log4jgroupId>            <artifactId>log4j-coreartifactId>            <version>${log4j.version}version>        dependency>

        <dependency>            <groupId>org.apache.logging.log4jgroupId>            <artifactId>log4j-webartifactId>            <version>${log4j.version}version>        dependency>        <dependency>             <groupId>org.apache.logging.log4jgroupId>            <artifactId>log4j-slf4j-implartifactId>            <version>${log4j.version}version>        dependency>        <dependency>             <groupId>org.apache.logging.log4jgroupId>            <artifactId>log4j-jclartifactId>            <version>${log4j.version}version>        dependency>        <dependency>            <groupId>org.slf4jgroupId>            <artifactId>slf4j-apiartifactId>            <version>${slf4j.version}version>        dependency>

    dependencies>

我推荐搭建基于Java Config形式的Spring框架,不需要配置文件,全部使用Java代码形式来定义,简洁明了,对于想要深入了解Spring源码来说这点很重要,否则可能需要看非常多的Spring解析XML配置文件的解析类,对于任何人都不是很容易的功夫。而使用Java Config形式能直接看到配置类的运行流程,对了解Spring源码很有帮助。

要搭建基于Java Config形式的Spring框架,要求Servlet-api版本3.0以上,同时推荐Spring版本4.0以上,日志可以使用我另一篇博客上的log4j2的配置,自己修改下输出日志文件路径就可以了。

public class WebContextInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    @Override    protected Class>[] getRootConfigClasses() {        return new Class>[] {RootContextConfig.class};    }}

@Configuration@ComponentScanpublic class RootContextConfig {    @Bean    public Child child() {        return new Child();    }}

public class Child {}

@Componentpublic class Mother {}

把这几个类都放在一个包下,然后启动tomcat,应该就可以启动Spring了,这就是一个最基本的Spring框架,而且包含了Java Config的Bean的定义以及组件扫描,RootContextConfig这个类就是容器的配置类,之后就可以开始跟着Spring框架的启动流程看了,DEBUG跟着一步一步的走。

WebContextInitializer 的父类的将RootContextConfig 当做配置类生成一个AnnotationConfigWebApplicationContext 类型ApplicationContext容器,注入到ContextLoaderListener中。

    ......    protected WebApplicationContext createRootApplicationContext() {        Class>[] configClasses = getRootConfigClasses();        if (!ObjectUtils.isEmpty(configClasses)) {            AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();            rootAppContext.register(configClasses);            return rootAppContext;        }        else {            return null;        }    }    ......    protected void registerContextLoaderListener(ServletContext servletContext) {        WebApplicationContext rootAppContext = createRootApplicationContext();        if (rootAppContext != null) {            ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);            listener.setContextInitializers(getRootApplicationContextInitializers());            servletContext.addListener(listener);        }        else {            logger.debug("No ContextLoaderListener registered, as " +                    "createRootApplicationContext() did not return an application context");        }    }

不要对Tomcat内的源码花时间,主要是看Spring的源码,之后就可以看ContextLoaderListener的contextInitialized(…)方法了,Spring容器就是在这个方法里初始化生成的。如何初始化,这个太复杂了,需要花非常多的时间去看,去思考的,这里就不讲了,不过我可以说一些我自己总结的小技巧:

  1. 说是看源码,其实应该叫看和想。Spring源码很复杂,我觉得花在思考上的时间至少要和看的时间对等。看了,如果没有花时间想明白,等于白看。

  2. 理解重于记忆。Spring的流程很长,东西很多,如果单纯靠记忆肯定记不过来的,知道每个组件的大体作用以及作用的节点就够了,源码就在那里,又不会跑,记不清了翻翻就看到了,多翻几次就能够慢慢记住了,最开始看的时候不要执着于记忆。

  3. 多做笔记。Spring组件很多,在最开始看的时候,推荐做些笔记,将每个重要接口的作用及关键代码记录下,有时间就看看,最先了解的组件是你切入Spring源码的切口,借助他们能关联到其他的组件。

  4. 多百度。在看一些关键接口或者类时,如果其代码很复杂,先百度下吧,先对其功能有个了解,然后对照着功能看代码会有很大的帮助。

  5. 要多遍地看,反复地看。别想着看一遍就能看明白,在最开始的几次跟着初始化流程看源码时,不要执着于某个细节。先对Spring所有的组件功能有个大体了解,对初始化流程有个大体的了解,这是深入的基础。

  6. 多看日志,多DEBUG。多看日志能够提高你对Spring流程的了解程度,而且在排错时能有效提高效率;DEBUG是看源码最好的一种方式,是解疑的最直接途径,对于有些运行时难以触及的代码,需要你手动创造条件让流程走入此处。

  7. 多总结,多动手。不要仅局限于看和思考,要动手。源码看的仔细,基本能从源码上看出很多Spring组件的使用方式,总结各种组件的使用方法,然后自己定义相应的组件,将其引入Spring中,查看其作用流程,这是你拓展Spring的第一步,既能增强对Spring的理解,也能提高你对Spring的拓展能力。

  8. 不断完善框架。每熟悉一种组件的使用,就添加到自己的 框架中,不断完善自己的框架,到最后你的框架能够整合Spring大部分好用组件,也是你以后回顾Spring框架的最大助力。

  9. 多看注释,看方法的名称,参数和返回值。看注释,理解类,属性和方法的作用,着重第一段注释;看方法的名称,参数和返回值能对方法的作用有很明显的说明。

以上就是我自己看Spring总结的一些小技巧,希望对你们有些助益。如果在看Spring源码的过程中有些疑问,可以在回复里提,我会尽量帮助解答。

文章转自:https://blog.csdn.net/qq_27529917/article/details/79209846

第二天学习打卡

大家有问题也可以在评论区写出来,记载在第二天公众号里面发出来一起探讨。。

今天的主题是关于面试题解答,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,

所以如果大家觉得这种模式不错的,欢迎大家评论,会坚持下去,每天分享6个面试常问题。

一方面帮助跳槽季来临之时。不时之需,一方面帮助大家巩固下基础,帮助活到学到老的机会 哈哈、另一方面也希望帮助想要换工作的朋友。

坚持半个月试一下、回答问题不仅提升了自己、更加帮助更多程序员们、哈哈 记得坚持来打卡。

答:

1.

2.

3.

4.

5.

6.

欢迎置顶公众号、晚上10点公众号公布答案、评论区见。

如何更改spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天相关推荐

  1. 面试有没有看过spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天...

    原标题:如何看Spring源码.Java每日六道面试分享,打卡第二天 想要深入的熟悉了解Spring源码,我觉得第一步就是要有一个能跑起来的极尽简单的框架,下面我就教大家搭建一个最简单的Spring框 ...

  2. 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...

    快看点邀请码填写HGC1QK 快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦 快看点官网下载是一款非常好玩的软件,喜欢此类风格的用户可以体验一下哦. 快看点官网下载特色系统: 如此好玩的 ...

  3. 羊了个羊游戏网站源码_带前后端源码,带教程

    羊了个羊游戏源码_带前后端源码_及配置教程说明 这是啥游戏?据悉,这是一款卡通背景的消除闯关游戏.玩家们需要点击上方卡牌,被选中的卡牌会下移到底部的木框中,框内最多可以储存7张卡牌,当有3张相同的卡牌 ...

  4. 面试有没有看过spring源码_怎么阅读Spring源码?

    此问必是有心人,有心人必有心答. --题记 当我看到这个问题的时候,不禁心里一问,为何要阅读spring源码? 在我们的生活之中,有形形色色的万物(Object),有飞机,有汽车,有轮船,还有我这个沧 ...

  5. 【源码阅读】看Spring Boot如何自动装配ActiveMQ收发组件

    源于好奇,我研究了一下Spring Boot中ActiveMQ相关组件是如何自动装配的.记录如下. 源码路径 本文以Spring Boot 1.5.10.RELEASE版本为例. 在spring-bo ...

  6. 虚拟商品帐号交易平台源码_支持个人二维码收款

    精仿淘手游马上有号账号交易平台源码支持个人二维码收款,安装非常简单,支持个人二维码收款,可以运营精仿马上有号账号交易平台源码 支持个人二维码收款 安装教程: PHP版本一定要选择5.2 1.先修改配置 ...

  7. spring 循环依赖_简单说说 Spring 的循环依赖

    作者 | 田伟然 回首向来萧瑟处,归去,也无风雨也无晴. 杏仁工程师,关注编码和诗词. 前言 本文最耗时间的点就在于想一个好的标题, 既要灿烂夺目,又要光华内敛,事实证明这比砍需求还要难! 由于对象之 ...

  8. python 字节码_简单入门python字节码混淆

    前言 我就是小菜鸡本鸡了,不是很会写东西,请各位大佬多多见谅.本文基于python2.7,因为python3并不是很懂. python文件如果要发布的话,有时候还是难免想保护一下自己的源码,有些人就直 ...

  9. spring ioc原理_干了5年的Java面试官,把他喜欢问的几十个Spring面试题告诉我了

    前言: Spring 框架知识是互联网公司面试必考知识点.对于开发同学来说,Spring 框架熟悉又陌生. 熟悉:开发过程中无时无刻不在使用 Spring 的知识点:陌生:对于基本理论知识疏于整理与记 ...

  10. 微信创建二维码_如何创建二维码

    微信创建二维码 QR codes aren't everyone's cup of tea but I quite like them. If I see something I want to re ...

最新文章

  1. CISCO设备上DHCP实例
  2. Vscode 调试 Flutter 项目
  3. Ping命令为什么要加上“-t”参数
  4. win10 mysql 3534_win10 mysql 5.7.13 服务无法启动 3534
  5. CentOS 6.3 64bit 搭建vsFTP服务
  6. validation注解及自定义注解
  7. vnc oracle solaris,在Solaris下安装VNC 远程安装Oracle
  8. linux mint 图标主题_如何在 Linux Mint 中更换主题
  9. 南京理工大学计算机学院教授严捍,2019年7月1日学术报告二则(宋巍 教授,南京理工大学;张鹏程 副教授,河海大学)...
  10. 长脸了!阿里云这位英雄拿下了世界第一
  11. linux查看python安装库_linux下怎么查看python的包
  12. shiro+springmvc+mybatis【转】
  13. MT【305】丹德林双球
  14. android studio运行APP到手机
  15. Windows10设置暗色主题
  16. Keyphrase Chunking - bert2chunk_dataloader.py分析
  17. message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,或配置 project.config.json 的 packNpmMa
  18. MSCKF-vio源码阅读
  19. Clion 打包exe无法运行 且 cmd窗口中文乱码
  20. Kafka 命令之查看topic生产消费数据查看组的消费信息

热门文章

  1. autoresizingMask的用法
  2. uva 11426 GCD - Extreme (II)
  3. 基于词典的社交媒体内容的情感分析(Python实现)
  4. selenium模拟点击的几种方法探讨
  5. python 根据对应关系批量修改文件名
  6. R中ggplot2绘图学习笔记
  7. eclipse启动失败,报an error has occurred.see the log file错
  8. linux ruby作用域,Ruby 的作用域和作用域门
  9. nginx trac mysql svn_linux下nginx+svn
  10. python强行终止程序,如何终止Python脚本