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的加载机制?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux操作系统字段含义,Linux系
- 下一篇: c语言程序设计课程设计心得体会,C语言程