日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java类spring加载_spring的加载机制?

發布時間:2024/9/27 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java类spring加载_spring的加载机制? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,今天面試官問我spring的加載機制有哪些---這么"抽象"的問題作為一個十多年經驗的自己寫過MVC,IOC,ORM, 等各種中間件小框架的開發人員也回答不出來~

確切的說是無從談起,不知道從哪個角度說這個事情,在我的觀點里這個問題本身的問法就有問題,什么叫"加載機制",spring加載的是什么????

我很好奇在問別人"spring的加載機制有哪些"的時候意圖想知道spring是如何被啟動的,還是spring是如何"加載"他管理的組件的;這個問題本身就有很大的歧義~

(我第一反應是后者,如果你是問前者,然后告訴我通過什么new XmlApplicationContext("app.xml")或者WebApplicationContext...這種是你的正確答案,我就會覺得你很LOW~

哈哈,當然后者其實也是一個很LOW的面試問題~).

WEB容器"加載"Spring這種說法其實是不合適的~Spring本身并沒有納入web容器的管理~

用"加載"這個詞來描述Spring"啟動"之后對"被管理組件"的初始化和管理也是非常可笑的說法~

所以其實你可以忽略這個面試官給你的影響的,很多面試官本身自個兒水平就不咋樣,網上找一些有所謂正確答案的題目...很多時候他們其實自己都不知道自己在干什么問什么~

2,Spring最核心的東西是什么?盡管現在的spring看起來那么龐雜似乎保羅萬象,但他最核心的東西是容器~

什么是容器?上面有人說容器就是個Map,這句話對也不對,

因為容器不僅僅是存放組件,它最主要的功能是"管理組件的生命周期和依賴".

對象的創建(包括初始化),銷毀....當你從容器中get一個組件的時候,該組件所依賴的組件也必須相應的被初始化(當然也有可能是lazy的,只在真正用到的時候);

組件A依賴B和C,C依賴D,D依賴B.....我要得到組件A就需要相應的一層層的初始化其他組件,其他組件之間可能存在相互依賴這種情況,這種層層依賴的管理如果人工管理就會非常麻煩~容器能幫助你管理組件,讓這種依賴看起來"扁平"一些~

這是容器核心要解決的問題~

至于其他IOC外圍的功能比如MVC,AOP,集成其他第三方組件,都是次要的~從這一層面而言,Spring容器更像一個粘合劑~各個組件之間的連接和集成的橋梁~

3,有人提到了WEB容器(Tomcat),那就說說WEB容器;

如果你看過tomcat的代碼你就發現,Tomcat本身就是一個容器~他管理著他自身組件的生命周期,你可以看一下tomcat conf目錄下的 "server.xml",他是一個層次結構的包括Server,Connector,Engine,Context Listener 和我們直接關系的Servlet....

他的作用和spring的applicationContext.xml本質上是一樣的~

Tomcat讀取這個XML然后初始化這些組件,跟Spring讀取XML初始化管理自己組件的本質其實是一樣的;

這其實存在一個問題:他們是兩個容器,對彼此容器內的東西沒有控制權,這兩個容器是不兼容的~ @廖雪峰 已經說了Tomcat根本不知道你是否使用了Spring,

Tomcat根據自己的XMLs(包括web.xml)管理自己的組件比如Servlet;Spring根據自己的applicationContext.xml(s)管理自己的組件~

好些年前我遇到過一個問題:

public class LoginServlet extends HttpServlet

{

private static final long serialVersionUID = 1L;

//這里有沒有辦法直接從Spring容器中獲得UserService的實現呢? @Autowired

UserService userService;

有沒有辦法對Servlet的屬性直接做依賴注入呢?大家思考一下?~

另外一個問題:

有沒有辦法讓Spring來管理我們的Servlet,使得上面的UserService可以注入呢?

注意:我這里說的是容器定義的Servlet~不是什么你自己定義的Action或者Controller;

4,另外我覺得其實沒有必要"非得"研究JVM或者GC,我是說沒有必要為了面試去研究他們,如果你感興趣,時間允許,沒有任何問題~

否則就會像你說的:看了->用不到->忘了~

至于非得學什么新的框架~我覺得也沒必要吧;

在我看來學會"使用"一個框架是很簡單的事情,但學精任何框架都是很困難的事情~

多看看你現在會的框架,看看他們的代碼知道為什么要那么干,知道他們功能的邊界,什么事情不能干的,有沒有更好的實現辦法~多知道一些本質性的東西,我覺得可能會更好一些~

另外有時間關注一下新的技術,知道他們是什么能干嗎就沒問題了;

我覺得自己是一個需求驅動型的~遇到問題有思路就行了~

5,還有,有人說自己實現一個Spring也是非常簡單的事兒~

按照這個邏輯我是不是也可以說造個核反應堆也是一個很簡單事兒?

我只能說你考慮的太少了,很多事情原理很簡單,但實際上你要遇到的問題遠比你想象的多~

稍微嚴謹一點的表述是"自己寫一個類似Spring的玩具IOC容器也比較簡單~"

總結

以上是生活随笔為你收集整理的java类spring加载_spring的加载机制?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。