如何更改spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天
想要深入的熟悉了解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容器就是在这个方法里初始化生成的。如何初始化,这个太复杂了,需要花非常多的时间去看,去思考的,这里就不讲了,不过我可以说一些我自己总结的小技巧:
说是看源码,其实应该叫看和想。Spring源码很复杂,我觉得花在思考上的时间至少要和看的时间对等。看了,如果没有花时间想明白,等于白看。
理解重于记忆。Spring的流程很长,东西很多,如果单纯靠记忆肯定记不过来的,知道每个组件的大体作用以及作用的节点就够了,源码就在那里,又不会跑,记不清了翻翻就看到了,多翻几次就能够慢慢记住了,最开始看的时候不要执着于记忆。
多做笔记。Spring组件很多,在最开始看的时候,推荐做些笔记,将每个重要接口的作用及关键代码记录下,有时间就看看,最先了解的组件是你切入Spring源码的切口,借助他们能关联到其他的组件。
多百度。在看一些关键接口或者类时,如果其代码很复杂,先百度下吧,先对其功能有个了解,然后对照着功能看代码会有很大的帮助。
要多遍地看,反复地看。别想着看一遍就能看明白,在最开始的几次跟着初始化流程看源码时,不要执着于某个细节。先对Spring所有的组件功能有个大体了解,对初始化流程有个大体的了解,这是深入的基础。
多看日志,多DEBUG。多看日志能够提高你对Spring流程的了解程度,而且在排错时能有效提高效率;DEBUG是看源码最好的一种方式,是解疑的最直接途径,对于有些运行时难以触及的代码,需要你手动创造条件让流程走入此处。
多总结,多动手。不要仅局限于看和思考,要动手。源码看的仔细,基本能从源码上看出很多Spring组件的使用方式,总结各种组件的使用方法,然后自己定义相应的组件,将其引入Spring中,查看其作用流程,这是你拓展Spring的第一步,既能增强对Spring的理解,也能提高你对Spring的拓展能力。
不断完善框架。每熟悉一种组件的使用,就添加到自己的 框架中,不断完善自己的框架,到最后你的框架能够整合Spring大部分好用组件,也是你以后回顾Spring框架的最大助力。
多看注释,看方法的名称,参数和返回值。看注释,理解类,属性和方法的作用,着重第一段注释;看方法的名称,参数和返回值能对方法的作用有很明显的说明。
以上就是我自己看Spring总结的一些小技巧,希望对你们有些助益。如果在看Spring源码的过程中有些疑问,可以在回复里提,我会尽量帮助解答。
文章转自:https://blog.csdn.net/qq_27529917/article/details/79209846
第二天学习打卡
大家有问题也可以在评论区写出来,记载在第二天公众号里面发出来一起探讨。。
今天的主题是关于面试题解答,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,
所以如果大家觉得这种模式不错的,欢迎大家评论,会坚持下去,每天分享6个面试常问题。
一方面帮助跳槽季来临之时。不时之需,一方面帮助大家巩固下基础,帮助活到学到老的机会 哈哈、另一方面也希望帮助想要换工作的朋友。
坚持半个月试一下、回答问题不仅提升了自己、更加帮助更多程序员们、哈哈 记得坚持来打卡。
答:
1.
2.
3.
4.
5.
6.
欢迎置顶公众号、晚上10点公众号公布答案、评论区见。
如何更改spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天相关推荐
- 面试有没有看过spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天...
原标题:如何看Spring源码.Java每日六道面试分享,打卡第二天 想要深入的熟悉了解Spring源码,我觉得第一步就是要有一个能跑起来的极尽简单的框架,下面我就教大家搭建一个最简单的Spring框 ...
- 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...
快看点邀请码填写HGC1QK 快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦 快看点官网下载是一款非常好玩的软件,喜欢此类风格的用户可以体验一下哦. 快看点官网下载特色系统: 如此好玩的 ...
- 羊了个羊游戏网站源码_带前后端源码,带教程
羊了个羊游戏源码_带前后端源码_及配置教程说明 这是啥游戏?据悉,这是一款卡通背景的消除闯关游戏.玩家们需要点击上方卡牌,被选中的卡牌会下移到底部的木框中,框内最多可以储存7张卡牌,当有3张相同的卡牌 ...
- 面试有没有看过spring源码_怎么阅读Spring源码?
此问必是有心人,有心人必有心答. --题记 当我看到这个问题的时候,不禁心里一问,为何要阅读spring源码? 在我们的生活之中,有形形色色的万物(Object),有飞机,有汽车,有轮船,还有我这个沧 ...
- 【源码阅读】看Spring Boot如何自动装配ActiveMQ收发组件
源于好奇,我研究了一下Spring Boot中ActiveMQ相关组件是如何自动装配的.记录如下. 源码路径 本文以Spring Boot 1.5.10.RELEASE版本为例. 在spring-bo ...
- 虚拟商品帐号交易平台源码_支持个人二维码收款
精仿淘手游马上有号账号交易平台源码支持个人二维码收款,安装非常简单,支持个人二维码收款,可以运营精仿马上有号账号交易平台源码 支持个人二维码收款 安装教程: PHP版本一定要选择5.2 1.先修改配置 ...
- spring 循环依赖_简单说说 Spring 的循环依赖
作者 | 田伟然 回首向来萧瑟处,归去,也无风雨也无晴. 杏仁工程师,关注编码和诗词. 前言 本文最耗时间的点就在于想一个好的标题, 既要灿烂夺目,又要光华内敛,事实证明这比砍需求还要难! 由于对象之 ...
- python 字节码_简单入门python字节码混淆
前言 我就是小菜鸡本鸡了,不是很会写东西,请各位大佬多多见谅.本文基于python2.7,因为python3并不是很懂. python文件如果要发布的话,有时候还是难免想保护一下自己的源码,有些人就直 ...
- spring ioc原理_干了5年的Java面试官,把他喜欢问的几十个Spring面试题告诉我了
前言: Spring 框架知识是互联网公司面试必考知识点.对于开发同学来说,Spring 框架熟悉又陌生. 熟悉:开发过程中无时无刻不在使用 Spring 的知识点:陌生:对于基本理论知识疏于整理与记 ...
- 微信创建二维码_如何创建二维码
微信创建二维码 QR codes aren't everyone's cup of tea but I quite like them. If I see something I want to re ...
最新文章
- CISCO设备上DHCP实例
- Vscode 调试 Flutter 项目
- Ping命令为什么要加上“-t”参数
- win10 mysql 3534_win10 mysql 5.7.13 服务无法启动 3534
- CentOS 6.3 64bit 搭建vsFTP服务
- validation注解及自定义注解
- vnc oracle solaris,在Solaris下安装VNC 远程安装Oracle
- linux mint 图标主题_如何在 Linux Mint 中更换主题
- 南京理工大学计算机学院教授严捍,2019年7月1日学术报告二则(宋巍 教授,南京理工大学;张鹏程 副教授,河海大学)...
- 长脸了!阿里云这位英雄拿下了世界第一
- linux查看python安装库_linux下怎么查看python的包
- shiro+springmvc+mybatis【转】
- MT【305】丹德林双球
- android studio运行APP到手机
- Windows10设置暗色主题
- Keyphrase Chunking - bert2chunk_dataloader.py分析
- message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,或配置 project.config.json 的 packNpmMa
- MSCKF-vio源码阅读
- Clion 打包exe无法运行 且 cmd窗口中文乱码
- Kafka 命令之查看topic生产消费数据查看组的消费信息
热门文章
- autoresizingMask的用法
- uva 11426 GCD - Extreme (II)
- 基于词典的社交媒体内容的情感分析(Python实现)
- selenium模拟点击的几种方法探讨
- python 根据对应关系批量修改文件名
- R中ggplot2绘图学习笔记
- eclipse启动失败,报an error has occurred.see the log file错
- linux ruby作用域,Ruby 的作用域和作用域门
- nginx trac mysql svn_linux下nginx+svn
- python强行终止程序,如何终止Python脚本