Spring面試知識點總結


什么是Spring
------開源的,控制反轉(Inversion of Control)和面向切面的容器框架。 
Spring核心: 
IOC(控制反轉)-------創建對象並且組裝對象之間的關系。 
IOC:應用程序本身不負責依賴對象的創建和維護,依賴對象的創建和維護是由外部容器負責的。這樣控制權就由應用程序轉移到了外部容器。控制權的轉移就是所謂的反轉。 

依賴注入:Dependency Injection:在運行時由外部容器將依賴對象注入到組件中。

 

為什么使用Spring 
1:降低組件之間的耦合度,實現各層之間的解耦 
2:可以使用容器提供的眾多服務。如: 
--事務管理服務 
--JMS 
--Spring core核心服務 
--持久化服務 
--其他 
3:提供了單例模式支持。開發人員不需要自己編寫實現代碼 
4:提供了AOP技術。實現如:權限攔截,運行監控等功能 
5:提供了眾多的輔助類。如JDBC Template,HIbernate Template 
6:對主流的應用框架提供了集成支持。集成Struts,JPA,Hibernate

 

spring的7個模塊

spring核心容器(Core)

spring上下文

springAOP

SpringDAO

SpringORM

springWeb支持struts集成

springMVC自帶的mvc框架

 

 

 

spring實現的2種設計模式

單態模式:接受容器管理的bean,默認采用單態模式管理。

工廠模式:spring就是實例化和管理全部bean的工廠。spring的上下文也就是工廠,也被設計成單態的

 

spring的依賴注入(也叫控制反轉Ioc)實現策略有3種

 

依賴查找

依賴注入:接口注入(如Context.lookup)、構造注入、設置值注入。

 

注:利用反射來實現的。

 

設置值注入優點

與javabean類似,直觀、自然、不臃腫、

 

構造注入優點

決定注入順序

缺點:臃腫

 

IOC容器優缺點

優點:實現對象的熱插拔。

缺點:步驟復雜、利用反射使效率損耗、缺少IDE重構支持。

 

 

 

 

 

 

spring容器:BeanFactory和ApplicationContext

之間是父子的關系

 

 

Spring實例化bean的三種方式
1:默認使用類加載器 
2:使用靜態工廠方法實例化bean對象 
<bean id="名稱" class="工廠類" factory-method="工廠類中創建bean實例的方法"/> 
3:使用實例工廠方法實例化bena對象 
<bean id="實例工廠名稱" class="工廠類的路徑"/> 
<bean id="名稱"  factory-bean="實例工廠名稱" method="實例工廠里邊的創建bena對象的方法"/>

Spring管理的bean的作用域
Spring生成的bean默認為單實例。singleton。 
如果需要每次調用Spring的getBean方法就創建一個 bean的實例,可指定bean的屬性scope="prototype"

還有:request、session、global session 這3個一般基於web的spring ApplicationContext情形下有效。

 

Spring的生命周期 
bean的實例化: 
1:當作用域范圍為singleton時,在初始化Spring容易的時候實例化bean實例。 
---1:如果lazy-init的值為true,則為延遲bean的實例化,即在Spring容器啟動時不實例化bean的對象 
2:當作用域范圍為prototype時,在調用Spring的getBean的方法時實例化bean對象

注入依賴對象可以采用手工裝配或者自動裝配,在實際應用中建議采用手工裝配。因為自動裝配會產生未知情況,開發人員無法預見最終的裝配結果。

 

 

加載spring有2種方式(略)

 

 

bean的屬性

id                       命名bean

class                  實例化的類

factory-method  指定工廠方法

factory-bean     指定工廠類

scope                指定bean的作用域

depends-on      指定依賴bean

lazy-init             延遲初始化bean

init-method        初始化回調

destory-method  析構回調

parent              繼承bean

 

bean的子元素

<property>子元素

直接value屬性、使用子<value>、使用<ref>子元素指向另一個bean

此外property還可以包含集合:<list> <set>  <map>  <props>他們分別對應List Set  Map  Properties的值

 

<constructor-arg>子元素

用type指定參數類型、value指定輸入參數的值

用ref屬性指定其他的bean

使用<ref>子元素指向另一個bean

 

 

springAOP

 

AOP 是一個概念,一個規范,本身並沒有設定具體語言的實現,這實際上提供了非常廣闊的發展的空間。AspectJ是AOP的一個很悠久的實現,它能夠和 Java 配合起來使用。

 

AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向方面編程。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目標的一種實現。 
 

 

      AspectJ 中幾個必須要了解的概念:

  Aspect: Aspect 聲明類似於 Java 中的類聲明,在 Aspect 中會包含着一些 Pointcut 以及相應的 Advice。

  Joint point(連接點):表示在程序中明確定義的點,典型的包括方法調用,對類成員的訪問以及異常處理程序塊的執行等等,它自身還可以嵌套其它 joint point。

  Pointcut(切入點):表示一組 joint point,這些 joint point 或是通過邏輯關系組合起來,或是通過通配、正則表達式等方式集中起來,它定義了相應的 Advice 將要發生的地方。

  Advice(通知):Advice 定義了在 pointcut 里面定義的程序點具體要做的操作,它通過 before、after 和 around 來區別是在每個 joint point 之前、之后還是代替執行的代碼。

 

注:如果沒有實現接口,需要引入cglib

 

[轉載http://wxg6203.iteye.com/blog/767100]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM