面试有没有看过spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天...
原標(biāo)題:如何看Spring源碼、Java每日六道面試分享,打卡第二天
想要深入的熟悉了解Spring源碼,我覺(jué)得第一步就是要有一個(gè)能跑起來(lái)的極盡簡(jiǎn)單的框架,下面我就教大家搭建一個(gè)最簡(jiǎn)單的Spring框架,而且是基于Java Config形式的零配置Spring框架。
首先第一步創(chuàng)建一個(gè)空的maven web項(xiàng)目,這步很簡(jiǎn)單,自行百度。
在maven項(xiàng)目的pom.xml文件中添加Spring基礎(chǔ)依賴:
4.3.7.RELEASE
1.7.21
2.8.2
1.2
org.springframework
spring-framework-bom
${spring.version}
pom
import
org.springframework
spring-context
org.springframework
spring-web
org.springframework
spring-webmvc
org.springframework
spring-core
org.springframework
spring-beans
org.springframework
spring-aop
org.apache.logging.log4j
log4j-api
${log4j.version}
org.apache.logging.log4j
log4j-core
${log4j.version}
org.apache.logging.log4j
log4j-web
${log4j.version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j.version}
org.apache.logging.log4j
log4j-jcl
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
我推薦搭建基于Java Config形式的Spring框架,不需要配置文件,全部使用Java代碼形式來(lái)定義,簡(jiǎn)潔明了,對(duì)于想要深入了解Spring源碼來(lái)說(shuō)這點(diǎn)很重要,否則可能需要看非常多的Spring解析XML配置文件的解析類,對(duì)于任何人都不是很容易的功夫。而使用Java Config形式能直接看到配置類的運(yùn)行流程,對(duì)了解Spring源碼很有幫助。
要搭建基于Java Config形式的Spring框架,要求Servlet-api版本3.0以上,同時(shí)推薦Spring版本4.0以上,日志可以使用我另一篇博客上的log4j2的配置,自己修改下輸出日志文件路徑就可以了。
public class WebContextInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class> getRootConfigClasses {
return new Class> {RootContextConfig.class};
}
}
@Configuration
@ComponentScan
public class RootContextConfig {
@Bean
public Child child {
return new Child;
}
}
public class Child {
}
@Component
public class Mother {
}
把這幾個(gè)類都放在一個(gè)包下,然后啟動(dòng)tomcat,應(yīng)該就可以啟動(dòng)Spring了,這就是一個(gè)最基本的Spring框架,而且包含了Java Config的Bean的定義以及組件掃描,RootContextConfig這個(gè)類就是容器的配置類,之后就可以開(kāi)始跟著Spring框架的啟動(dòng)流程看了,DEBUG跟著一步一步的走。
WebContextInitializer 的父類的將RootContextConfig 當(dāng)做配置類生成一個(gè)AnnotationConfigWebApplicationContext 類型ApplicationContext容器,注入到ContextLoaderListener中。
......
protected WebApplicationContext createRootApplicationContext {
Class> configClasses = getRootConfigClasses;
if (!ObjectUtils.isEmpty(configClasses)) {
AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext;
rootAppContext.register(configClasses);
return rootAppContext;
}
else {
return ;
}
}
......
protected void registerContextLoaderListener(ServletContext servletContext) {
WebApplicationContext rootAppContext = createRootApplicationContext;
if (rootAppContext != ) {
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");
}
}
不要對(duì)Tomcat內(nèi)的源碼花時(shí)間,主要是看Spring的源碼,之后就可以看ContextLoaderListener的contextInitialized(…)方法了,Spring容器就是在這個(gè)方法里初始化生成的。如何初始化,這個(gè)太復(fù)雜了,需要花非常多的時(shí)間去看,去思考的,這里就不講了,不過(guò)我可以說(shuō)一些我自己總結(jié)的小技巧:
說(shuō)是看源碼,其實(shí)應(yīng)該叫看和想。Spring源碼很復(fù)雜,我覺(jué)得花在思考上的時(shí)間至少要和看的時(shí)間對(duì)等。看了,如果沒(méi)有花時(shí)間想明白,等于白看。
理解重于記憶。Spring的流程很長(zhǎng),東西很多,如果單純靠記憶肯定記不過(guò)來(lái)的,知道每個(gè)組件的大體作用以及作用的節(jié)點(diǎn)就夠了,源碼就在那里,又不會(huì)跑,記不清了翻翻就看到了,多翻幾次就能夠慢慢記住了,最開(kāi)始看的時(shí)候不要執(zhí)著于記憶。
多做筆記。Spring組件很多,在最開(kāi)始看的時(shí)候,推薦做些筆記,將每個(gè)重要接口的作用及關(guān)鍵代碼記錄下,有時(shí)間就看看,最先了解的組件是你切入Spring源碼的切口,借助他們能關(guān)聯(lián)到其他的組件。
多百度。在看一些關(guān)鍵接口或者類時(shí),如果其代碼很復(fù)雜,先百度下吧,先對(duì)其功能有個(gè)了解,然后對(duì)照著功能看代碼會(huì)有很大的幫助。
要多遍地看,反復(fù)地看。別想著看一遍就能看明白,在最開(kāi)始的幾次跟著初始化流程看源碼時(shí),不要執(zhí)著于某個(gè)細(xì)節(jié)。先對(duì)Spring所有的組件功能有個(gè)大體了解,對(duì)初始化流程有個(gè)大體的了解,這是深入的基礎(chǔ)。
多看日志,多DEBUG。多看日志能夠提高你對(duì)Spring流程的了解程度,而且在排錯(cuò)時(shí)能有效提高效率;DEBUG是看源碼最好的一種方式,是解疑的最直接途徑,對(duì)于有些運(yùn)行時(shí)難以觸及的代碼,需要你手動(dòng)創(chuàng)造條件讓流程走入此處。
多總結(jié),多動(dòng)手。不要僅局限于看和思考,要?jiǎng)邮帧T创a看的仔細(xì),基本能從源碼上看出很多Spring組件的使用方式,總結(jié)各種組件的使用方法,然后自己定義相應(yīng)的組件,將其引入Spring中,查看其作用流程,這是你拓展Spring的第一步,既能增強(qiáng)對(duì)Spring的理解,也能提高你對(duì)Spring的拓展能力。
不斷完善框架。每熟悉一種組件的使用,就添加到自己的 框架中,不斷完善自己的框架,到最后你的框架能夠整合Spring大部分好用組件,也是你以后回顧Spring框架的最大助力。
多看注釋,看方法的名稱,參數(shù)和返回值。看注釋,理解類,屬性和方法的作用,著重第一段注釋;看方法的名稱,參數(shù)和返回值能對(duì)方法的作用有很明顯的說(shuō)明。
以上就是我自己看Spring總結(jié)的一些小技巧,希望對(duì)你們有些助益。如果在看Spring源碼的過(guò)程中有些疑問(wèn),可以在回復(fù)里提,我會(huì)盡量幫助解答。
文章轉(zhuǎn)自:https://blog.csdn.net/qq_27529917/article/details/79209846
第二天學(xué)習(xí)打卡
大家有問(wèn)題也可以在評(píng)論區(qū)寫出來(lái),記載在第二天公眾號(hào)里面發(fā)出來(lái)一起探討。。
今天的主題是關(guān)于面試題解答,求職是在每個(gè)技術(shù)人員的生涯中都要經(jīng)歷多次。對(duì)于我們大部分人而言,在進(jìn)入自己心儀的公司之前少不了準(zhǔn)備工作,
所以如果大家覺(jué)得這種模式不錯(cuò)的,歡迎大家評(píng)論,會(huì)堅(jiān)持下去,每天分享6個(gè)面試常問(wèn)題。
一方面幫助跳槽季來(lái)臨之時(shí)。不時(shí)之需,一方面幫助大家鞏固下基礎(chǔ),幫助活到學(xué)到老的機(jī)會(huì) 哈哈、另一方面也希望幫助想要換工作的朋友。
堅(jiān)持半個(gè)月試一下、回答問(wèn)題不僅提升了自己、更加幫助更多程序員們、哈哈 記得堅(jiān)持來(lái)打卡。
答:
1.
2.
3.
4.
5.
6.
歡迎置頂公眾號(hào)、晚上10點(diǎn)公眾號(hào)公布答案、評(píng)論區(qū)見(jiàn)。返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的面试有没有看过spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: demo python_GitHub -
- 下一篇: python样本期望值_用 python