【Java面試題】Spring
八、Spring
57)什麼是 Spring 的依賴注入
IOC( Inversion of Control )的⼀個重點是在系統執行中,動態的向某個物件提供它所需要的其他物件。
其中依賴注入(DI Dependency Injection)是實現IOC的一種方式。
a.介面注入
b.setter方法注入
c.構造方法注入
d.註解方式注入
平常我們 new 一個例項,這個例項的控制權是我們程式設計師,而控制反轉是指 new 例項工作不由我們程式設計師來做而是交給 spring 容器來做。
58)Spring 中的設計模式
a. 單例模式——spring 中兩種代理方式,若目標物件實現了若干介面, spring 使用 jdk 的java.lang.reflect.Proxy-Java 類代理。若目標兌現沒有實現任何介面,spring 使用 CGLIB 庫生成目標類的子類。單例模式——在 spring 的配置檔案中設定 bean 預設為單例模式。
b. 模板方式模式——用來解決程式碼重複的問題。比如:RestTemplate、JmsTemplate、JpaTemplate
c. 前端控制器模式——spring 提供了前端控制器 DispatherServlet 來對請求進行分發。
d. 試圖幫助(viewhelper)——spring 提供了一系列的 JSP 標籤,高效巨集來幫助將分散的程式碼整合在試圖中。
e. 依賴注入——貫穿於 BeanFactory/ApplacationContext 介面的核心理念
f. 工廠模式——在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用同一個介面來指向新建立的物件。Spring 中使用 beanFactory 來建立物件的例項。
59)怎樣開啟註解裝配?
註解裝配在預設情況下是不開啟的,為了使用註解裝配,我們必須在 Spring 配置檔案中配置context:annotation-config/元素。
60)Spring 的常用註解
@Required:該註解應用於設值方法
@Autowired:該註解應用於有值設值方法、非設值方法、構造方法和變數。
@Qualifier:該註解和@Autowired 搭配使用,用於消除特定 bean 自動裝配的歧義。
61)簡單解釋一下 Spring 的 AOP
AOP ( AspectOrientedProgramming ),即 面 向 切 面 編 程 , 可 以 說 是 OOP(ObjectOrientedProgramming,面向物件程式設計)的補充和完善。
OOP 引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的一個集合。不過 OOP 允許開發者定義縱向的關係,但並不適合定義橫向的關係,例如日誌功能。
在 OOP 設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。AOP 技術恰恰相反,它利用一種稱為"橫切" 的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用模組,並將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組之間的耦合度,並有利於未來的可操作性和可維護性。
62)Spring 的通知是什麼?有哪幾種類型?
通知是個在方法執行前或執行後要做的動作,實際上是程式執行時要通過 SpringAOP 框架觸發的程式碼段。Spring 切面可以應用五種型別的通知:
1)before:前置通知,在一個方法執行前被呼叫。
2)after:在方法執行之後呼叫的通知,無論方法執行是否成功。
3)after-returning:僅當方法成功完成後執行的通知。
4)after-throwing:在方法丟擲異常退出時執行的通知。
5)around:在方法執行之前和之後呼叫的通知。