JAVA實習找工作——Spring

引言

Spring框架爲三層架構(web層,service層,dao層)中第二層的位置,也可以說Spring框架概括所有的位置,即每一層中均有Spring的身影。

面試中,關於Spring主要是兩個方面的考察,第一Spring中的核心容器的學習,即IOC和DI,第二,面向切面編程的學習,即AOP。

IOC和DI

IOC:inverse of control,控制反轉,一開始學java的時候都聽說過一句話,缺什麼對象就new一個對象,但是在軟件工程的中,有一個原則叫低耦合高內聚,當我們new一個對象的時候,我們就開始依賴這個對象了,這樣就不符合低耦合高內聚的原則。

這裏我們的思想來一個小的轉變,以前,我們主動new對象,這種方式稱爲主動控制,因爲我們new的對象,我們控制這個對象。那麼什麼叫反轉控制呢?就是說現在我們不new對象了,讓別人去new,那麼這個控制權就給別人了,這種方式就是反轉控制。那麼這個別人是誰呢?就是大名鼎鼎的spring的IOC。這就是IOC的由來。

說完了IOC,DI(Dependency Injection)又是什麼呢?DI全名依賴注入,試想一下,new的對象裏面的屬性參數誰來給呢?我們自己new對象的話可以用set方法給對不對,我們交給Spring的IOC去new之後,誰來給呢?肯定是Spring來給,這種給的過程就叫依賴注入

總結:Spring的IOC就是一個容器,這個容器是key-value形式的,就是一個map,我們需要對象的時候就用key從IOC容器中拿對象,對象在創建過程中,屬性的聲明就叫依賴注入。下面兩張圖就更加形象了,第二張圖中的工廠就相當於Spring中的IOC容器。不多說了,這應該是最簡單易懂的IOC和DI的介紹了。

AOP

Spring中的AOP是Spring的第二大特性,AOP(面向切面編程)Aspect Oriented Programming ,什麼叫做面向切面編程呢?打比方說,爲什麼要打比方?。。。。。。我們的項目中有許多方法,當我需要在每個方法執行的時候打印一下日誌該怎麼辦?最簡單的方式就是在每個方法內部寫上打印日誌的代碼,這也就意味着所有的方法我們都要寫重複的代碼,並且有一天我需要改代碼的時候所有的都要改,麻煩而且不符合軟件工程設計模式的規範。

還有一個情況就是關於事務控制,Service層中每個方法基本上都要加上事務控制,,如果採取傳統的做法,我麼你需要在每個方法前後都加上事務控制的代碼,但是有了AOP之後,我們只需要寫一段關於事務的代碼即可。

簡單一句話總結:AOP是動態代理的一種實現,而動態代理的特點就是在不改變源代碼的基礎上對代碼進行增強。

AOP中的四大概念:

連接點(JointPoint):指的是項目中的所有方法,我們可以爲每一個方法都加上寫日誌的代碼,所以每一個候選者都是連接點

切入點(pointcut):那我們肯定不是每個方法都要加日誌,那些需要處理的連接點我們稱作切入點

通知(Advice):寫日誌的代碼就叫做通知,意思就是具體增強的那部分代碼

切面(Aspect)切入點+通知=切面

那麼AOP面向切面編程的概念就呼之欲出了,把通知寫到切入點裏面去這樣的過程就叫AOP,而通知+切入點=切面,所以又叫做面向切面編程。

 

面試一:Spring中bean的生命週期

單例對象:

出生:當容器創建時,對象出生;活着:只要容器存在,對象活着;死亡:容器銷燬,對象死亡

多例對象:

出生:當使用對象時Spring框架爲我們創建;活着:只要在使用,對象就一直存在;死亡:垃圾回收機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章