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