1.Hibernate工作原理及為什麼要用?
原理:
1.讀取并解析配置檔案
2.讀取并解析映射資訊,建立SessionFactory
3.打開Sesssion
4.建立事務Transation
5.持久化操作
6.送出事務
7.關閉Session
8.關閉SesstionFactory
為什麼要用:
1. 對JDBC通路資料庫的代碼做了封裝,大大簡化了資料通路層繁瑣的重複性代碼。
2. Hibernate是一個基于JDBC的主流持久化架構,是一個優秀的ORM實作。他很大程度
的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是位元組碼增強程式來實作透明性。
4. hibernate的性能非常好,因為它是個輕量級架構。映射的靈活性很出色。它支援
各種關系資料庫,從一對一到多對多的各種複雜關系。
2.Hibernate是如何延遲加載?
1. Hibernate2延遲加載實作:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲加載功能
當Hibernate在查詢資料的時候,資料并沒有存在與記憶體中,當程式真正對資料的操作
時,對象才存在與記憶體中,就實作了延遲加載,他節省了伺服器的記憶體開銷,進而提
高了伺服器的性能。
3.Hibernate中怎樣實作類之間的關系?(如:一對多、多對多的關系)
類與類之間的關系主要展現在表與表之間的關系進行操作,它們都市對對象進行操作
,我們程式中把所有的表與類都映射在一起,它們通過配置檔案中的many-to-one、
one-to-many、many-to-many
4.Struts1流程:
1、用戶端浏覽器發出HTTP請求。
2、根據web.xml配置,該請求被ActionServlet接收。
3、根據struts-config.xml配置, ActionServlet先将請求中的參數填充到
ActionForm中,然後ActionServlet再将請求發送到Action 進行處理。
4、是否驗證,需要驗證則調用ActionForm的validate方法,驗證失敗則跳轉到input
,成功則繼續。
5、Action從ActionForm獲得資料,調用javabean 中的業務方法處理資料。
6、Action傳回ActionForward對象,跳轉到相應JSP頁面或Action。
7、傳回HTTP響應到用戶端浏覽器。
MVC設計模式:
modal:“模型” 也稱業務邏輯,是正真完成任務的代碼,相當與JavaBean
view:視圖,其實就是顯示界面,相當于JSP
controller:控制器,他控制模型和視圖的互動過程,相當于servlet
struts1是基于MVC設計模式
hibernate是基于ORM對象關系映射
5.struts是什麼?
struts1是基于JSP和servlet的一個開源的Web應用架構,使用的是MVC的設計模式
struts2是基于webwork技術的架構,是sun和webwork公司聯手開發的一個功能非常齊
全的架構,
struts2和struts1沒有任何關系,是一個全新的架構
6.spring是什麼?
spring是一個內建了許多第三方架構的大雜燴,其核心技術是IOC(控制反轉,也稱依
賴注入)和AOP(面向切面程式設計)
7.hibernate是什麼?
hibernate是基于ORM對象關系映射(完成對象資料到關系資料映射的機制)實作的,做
資料持久化的工具
8.JSF是什麼?
JavaServer Face是基于元件的web開發架構,跟sturts差不多的架構
9.資料庫裡面的索引和限制是什麼?
索引是為了提高資料的檢索速度,索引是建立在資料表上,根據一個或多個字段建立
的限制是為了保持資料的完整性,限制有非空限制,主鍵限制,外鍵限制等等。
10.spring是什麼這個問題,往往可以通過我們為什麼要使用spring這個問題來切入:
AOP 讓開發人員可以建立非行為性的關注點,稱為橫切關注點,并将它們插入到應用
程式代碼中。使用 AOP 後,公共服務 (比 如日志、持久性、事務等)就可以分解成
方面并應用到域對象上,同時不會增加域對象的對象模型的複雜性。
IOC 允許建立一個可以構造對象的應用環境,然後向這些對象傳遞它們的協作對象。
正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務
定位器、單元素(singleton)和直接構造(straight construction),每一個對象
都是用其協作對象構造的。是以是由容器管理協作對象(collaborator)。
Spring即使一個AOP架構,也是一IOC容器。 Spring 最好的地方是它有助于您替換對
象。有了 Spring,隻要用 JavaBean 屬性和配置檔案加入依賴性(協作對象)。然後
可以很容易地在需要時替換具有類似接口的協作對象。
11.用自己的話簡要闡述struts2的執行流程。
Struts 2架構本身大緻可以分為3個部分:核心控制器FilterDispatcher、業務控制器
Action和使用者實作的企業業務邏輯元件。核心控制器FilterDispatcher是Struts 2框
架的基礎,包含了架構内部的控制流程和處理機制。業務控制器Action和業務邏輯組
件是需要使用者來自己實作的。使用者在開發Action和業務邏輯元件的同時,還需要編寫
相關的配置檔案,供核心控制器FilterDispatcher來使用。
Struts 2的工作流程相對于Struts 1要簡單,與WebWork架構基本相同,是以說Struts
2是WebWork的更新版本。基本簡要流程如下:
1、用戶端浏覽器發出HTTP請求。
2、根據web.xml配置,該請求被FilterDispatcher接收。
3、根據struts.xml配置,找到需要調用的Action類和方法, 并通過IoC方式,将值注
入給Aciton。
4、Action調用業務邏輯元件處理業務邏輯,這一步包含表單驗證。
5、Action執行完畢,根據struts.xml中的配置找到對應的傳回結果result,并跳轉到
相應頁面。
6、傳回HTTP響應到用戶端浏覽器。
1、寫出你熟悉的開源架構以及各自的作用(項目中為什麼使用SSH)
答:架構:hibernate,spring,struts1/struts2.
Hibernate主要用于資料持久化;封裝了JDBC操作;還提供了一個易用的、高效率的對象關系映射架構;
Spring 的控制反轉能起到解耦合的作用;
Struts 主要用于請求處理的流程控制;struts是基于MVC模式的,很好的将應用程式進行了分層,使開發者更關注于業務邏輯的實作;struts有着豐富的taglib,如能靈活運用,則能大大提高開發效率。
Struts(表示層)+Spring(業務層)+Hibernate(持久層)
struts相關
2、簡述STRUTS架構(說下Struts的工作流程、struts的工作原理)
簡述:
Struts是采用Java Servlet/JavaServer Pages技術,開發Web應用程式的開放源碼的framework。 采用Struts能開發出基于MVC(Model-View-Controller)設計模式的應用構架。 Struts有如下的主要功能: 一.包含一個controller servlet,能将使用者的請求發送到相應的Action對象。 二.JSP自由tag庫,并且在controller servlet中提供關聯支援,幫助開發員建立互動式表單應用。 三.提供了一系列實用對象:XML處理、通過Javareflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
流程:
在web應用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml檔案中讀取配置資訊,把它們存放到各種配置對象當ActionServlet接收到一個客戶請求時,将執行如下流程.
(1)檢索和使用者請求比對的ActionMapping執行個體,如果不存在,就傳回請求路徑無效資訊;
(2)如果ActionForm執行個體不存在,就建立一個ActionForm對象,把客戶送出的表單資料儲存到ActionForm對象中;
(3)根據配置資訊決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法;
(4)如果ActionForm的validate()方法傳回null或傳回一個不包含ActionMessage的ActuibErrors對象, 就表示表單驗證成功;
(5)ActionServlet根據ActionMapping所包含的映射資訊決定将請求轉發給哪個Action,如果相應的Action執行個體不存在,就先建立這個執行個體,然後調用Action的execute()方法;
(6)Action的execute()方法傳回一個ActionForward對象,ActionServlet在把客戶請求轉發給ActionForward對象指向的JSP元件;
(7)ActionForward對象指向JSP元件生成動态網頁,傳回給客戶;
3、Struts對MVC的展現
M: 在Struts中,模型由JavaBean和EJB元件組成,用來實作程式的業務邏輯部分.
C: ActionServlet,RequestProcessor和Struts輔助類來實作控制器。ActionServlet是Struts中的核心控制器ActionServlet會根據在Struts配置檔案中的配置将控制權轉交給相應的Action類。Action 類是業務的代理,在Action類中可以調用模型元件或者編寫其他業務邏輯代碼來完成一項具體的業務。
V: Struts架構中的視圖主要由JSP檔案構成,在JSP檔案中可應用Struts标簽和自定義标簽來表現模型元件中的資料進行簡單的處理。ActionForm Bean實際上是一個遵循了特殊約定的JavaBean,在Struts中ActionForm Bean可看作為一個中間存儲器在視圖與控制器之間進行資料傳遞。
4、struts1.2和struts2.0的差別?
a、Action類:
struts1.2要求Action類繼承一個基類。struts2.0 Action可以是簡單的JOPO對象或者(都會)繼承ActionSupport基類
b、線程模式
struts1.2 Action是單例模式的并且必須是線程安全的,因為僅有一個Action的執行個體來處理所有的請求。
單例政策限制了Struts1.2 Action能做的事情,并且開發時特别小心。Action資源必須是線程安全的或同步的。
struts2.0 Action為每一個請求産生一個執行個體,是以沒有線程安全問題。
c、Servlet依賴
struts1.2 Action依賴于Servlet API,因為當一個Action被調用時HttpServletRequest和HttpServletResponse被傳遞給execut方法。
struts2.0 Action不依賴于容器,允許Action脫離容器單獨測試。如果需要,Struts2 Action仍然可以通路初始的Request和Response。
但是,其他的元素減少或者消除了直接通路HttpServletRequest和HttpServletResponse的必要性。
d、可測性
測試struts1.2 Action的一個主要問題是execute方法暴露了Servlet API(這使得測試要依賴于容器)。一個第三方擴充:struts TestCase
提供了一套struts1.2的模拟對象來進行測試。
Struts2.0 Action可以通過初始化、設定屬性、調用方法來測試,“依賴注入”也使得測試更容易。
5、struts如何實作國際化
以下以兩國語言(中文,英文)為例:
1. 在工程中加入Struts支援
2. 編輯ApplicationResource.properties檔案,在其中加入要使用國際化的資訊, 例如: lable.welcome.china=Welcome!!!
3. 建立英文資源檔案ApplicationResource_en.properites
4. 建立臨時中文資源檔案ApplicationResource_temp.properites 例如:lable.welcom.china=中國歡迎您!
5. 對臨時中文資源檔案進行編碼轉換。可以使用myeclipse的插件,也可以在dos下執行:
native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties
6. 在jsp中加入struts的bean标記庫
6、 Struts架構的資料驗證可分為幾種類型?
表單驗證(由ActionForm Bean處理):如果使用者沒有在表單中輸入姓名,就送出表單,将生成表單驗證錯誤
業務邏輯驗證(由Action處理):如果使用者在表單中輸入的姓名為“Monster”,按照本應用的業務規則,不允許向“Monster”打招呼,是以将生成業務邏輯錯誤。
7、簡述Form Bean的表單驗證流程。
1、當使用者送出了HTML表單,Struts架構自動把表單資料組裝到ActionForm Bean中。
2、接下來Struts架構會調用ActionForm Bean的validate()方法進行表單驗證。
3、如果validate()方法傳回的ActionErrors 對象為null,或者不包含任何ActionMessage對象,就表示沒有錯誤,資料驗證通過。
4、如果ActionErrors中包含ActionMessage對象,就表示發生了驗證錯誤,Struts架構會把ActionErrors對象儲存到request範圍内,然後把請求轉發到恰當的視圖元件,視圖元件通過<html:errors>标簽把request範圍内的ActionErrors對象中包含的錯誤消息顯示出來,提示使用者修改錯誤。
8、簡單叙述ActionForm Bean的作用
1、ActionForm Bean也是一種JavaBean,除了具有一些JavaBean的正常方法,還包含一些特殊的方法,用于驗證HTML表單資料以及将其屬性重新設定為預設值。
2、Struts架構利用ActionForm Bean來進行View元件和Controller元件之間表單資料的傳遞。
3、Struts架構把View元件接受到的使用者輸入的表單資料儲存在ActionForm Bean中,把它傳遞給Controller元件,Controller元件可以對ActionForm Bean中的資料進行修改JSP檔案使用Struts标簽讀取修改後的ActionForm Bean的資訊,重新設定HTML表單。
9、Struts優缺點
優點:
1. 實作MVC模式,結構清晰,使開發者隻關注業務邏輯的實作.
2.有豐富的tag可以用 ,Struts的标記庫(Taglib),如能靈活動用,則能大大提高開發效率
3. 頁面導航
使系統的脈絡更加清晰。通過一個配置檔案,即可把握整個系統各部分之間的聯系,這對于後期的維護有着莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢展現得更加明顯。
4. 提供Exception處理機制 .
5. 資料庫連結池管理
6. 支援I18N
缺點
一、 轉到展示層時,需要配置forward,如果有十個展示層的jsp,需要配置十次struts,而且還不包括有時候目錄、檔案變更,需要重新修改forward,注意,每次修改配置之後,要求重新部署整個項目,而tomcate這樣的伺服器,還必須重新啟動伺服器
二、 二、 Struts 的Action必需是thread-safe方式,它僅僅允許一個執行個體去處理所有的請求。是以action用到的所有的資源都必需統一同步,這個就引起了線程安全的問題。
三、 測試不友善. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴于Web容器,單元測試也很難實作。不過有一個Junit的擴充工具Struts TestCase可以實作它的單元測試。
四、 類型的轉換. Struts的FormBean把所有的資料都作為String類型,它可以使用工具Commons-Beanutils進行類型轉化。但它的轉化都是在Class級别,而且轉化的類型是不可配置的。類型轉化時的錯誤資訊傳回給使用者也是非常困難的。
五、 對Servlet的依賴性過強. Struts處理Action時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。
六、 前端表達式語言方面.Struts內建了JSTL,是以它主要使用JSTL的表達式語言來擷取資料。可是JSTL的表達式語言在Collection和索引屬性方面處理顯得很弱。
七、 對Action執行的控制困難. Struts建立一個Action,如果想控制它的執行順序将會非常困難。甚至你要重新去寫Servlet來實作你的這個功能需求。
八、 對Action 執行前和後的處理. Struts處理Action的時候是基于class的hierarchies,很難在action處理前和後進行操作。
九、 對事件支援不夠. 在struts中,實際是一個表單Form對應一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單隻能 對應一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件
Hibernate相關
1、Hibernate架構的認識(工作原理)
Hibernate是一個輕量級的持久層開源架構,它是連接配接Java應用程式和關系資料庫的中間件,負責Java對象和關系資料之間的映射.
Hibernate内部對JDBC API進行了封裝,負責Java對象的持久化.
因為它封裝了所有的資料通路細節,使得業務邏輯層可以專注于實作業務邏輯.
它是一種優秀的ORM映射工具,提供了完善的對象-關系映射服務,開發過程不依賴容器,靈活性非常大,可以無縫內建到任何一個java系統中
2、 為什麼要用Hibernate
1. 封裝了jdbc,簡化了很多重複性代碼。
2. 簡化了DAO層編碼工作,使開發更對象化了。
3. 移植性好,支援各種資料庫,如果換個資料庫隻要在配置檔案中變換配置就可以了,不用改變hibernate代碼。
4. 支援透明持久化,因為hibernate操作的是純粹的(pojo)java類,沒有實作任何接口,沒有侵入性。是以說它是一個輕量級架構。
3、緩存:
session緩存:被稱為Hibernate的第一級緩存.它存放被單前工作單元加載的對象.
sessionFactory緩存:
被稱為Hibernate的第二級緩存.一個執行個體對應一個資料存儲源.它是線程安全的,是重量級的.
它需要一個很大的緩存,用來存放預定義的SQL語句以及映射中繼資料等.
4、對象的3個狀态
瞬時:一個實體通過new操作符建立後,沒有和Hibernate的Session建立關系,
也沒有手動指派過該實體的持久化辨別(持久化辨別可以認為映射表的主鍵)。
此時該實體中的任何屬性的更新都不會反映到資料庫表中。
持久化:當一個實體和Hibernate的Session建立了關系,
并擷取了持久化辨別,而且在Hibernate的Session生命周期記憶體在。
此時針對該實體任何屬性的更改都會直接影響到資料庫表中一條記錄對應字段的更新,
也即與對應資料庫表保持同步。
脫管:當一個實體和Hibernate的Session建立了關系,并擷取了持久化辨別,
而此時Hibernate的Session的生命周期結束,實體的持久化辨別沒有被改動過。
針對該實體的任何屬性的修改都不會及時反映到資料庫表中。
5、性能問題
在批操作性能和cache之間存在不可調和的沖突,
你要熟悉hibernate一級和二級緩存機制才能寫出合理批操作代碼,
否則不但性能低下,還可能導緻out memory。
hibernate reference文檔中的Best practise也提到,
Use hand-coded JDBC in bottlenecks,
也就是說在某些性能瓶頸的地方考慮使用寫死jdbc。
6、JDBC,Hibernate,EJB三者的差別?
EJB:我們必須遵守複雜的J2EE規範,Hibernate不強迫必須滿足特定的規範.
EJB隻能運作在EJB容器中,Hibernate可以運作在任何java環境中.
目前,對于複雜的域模型,EJB容器提供的對象-關系映射能力有限.相比之下,Hibernate提供了完善的對象-關系映射服務.
EJB雖然是一種可以移植的元件,但是實際上卻受到很大的限制,因為各個産商生産CMP引擎差異,它們使用的對象-關系映射
中繼資料各不相同,使得EJB不能順利的從一個EJB容器移植到另一個EJB容器當中.而Hibernate可以無縫內建到任何一個Java系統中.
JDBC:實作業務邏輯的代碼和通路資料庫的代碼混雜在一起,使程式結構不清晰,可讀性差
7、get和load的差別
1>不存在對應記錄時表現不一樣
2>load傳回的是代理對象(javassist.jar生成二進制碼),等到真正用到對象的内容才會發出SQL語句
3>get直接從資料庫加載,不會延遲
無論是get還是load,都會首先查找緩存(一級緩存),如果沒有,才會去資料庫查找,調用clear()方法,可以強制清除
8、Hibernate是如何延遲加載?
1. Hibernate2延遲加載實作:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲加載功能
當Hibernate在查詢資料的時候,資料并沒有存在與記憶體中,當程式真正對資料的操作時,對象才存在與記憶體中,就實作了延遲加載,他節省了伺服器的記憶體開銷,進而提高了伺服器的性能。
9、如何對hibernate進行優化?
1. 使用雙向一對多關聯,不使用單向一對多
2. 靈活使用單向一對多關聯
3. 不用一對一,用多對一取代
4. 配置對象緩存,不使用集合緩存
5. 一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多态
7. 表字段要少,表關聯不要怕多,有二級緩存
10、 hibernate的核心類是什麼,它們的互相關系是什麼?重要的方法是什麼?
Configuration 接口:配置Hibernate,根據其啟動hibernate,建立SessionFactory 對象;
SessionFactory 接口:初始化Hibernate,充當資料存儲源的代理,建立session 對象,sessionFactory 是線程安全的,意味着它的同一個執行個體可以被應用的多個線程共享,是重量級、二級緩存;
Session 接口:負責儲存、更新、删除、加載和查詢對象,是線程不安全的,避免多個線程共享同一個session,是輕量級、一級緩存;
Session如下方法: save,load,update,delete,
Query q=CreateQuery(“from Customer where customerName=:customerName”)
beginTransaction, close, transaction, commit
Transaction 接口:管理事務;
Query 和Criteria 接口:執行資料庫的查詢。
Spring相關
1、Spring的了解
Spring是一個輕量級的容器,非侵入性的架構.最重要的核心概念是IOC,并提供AOP概念的實作方式,提供對持久層,事務的支援,對目前流行的一些架構(Struts,Hibernate,MVC),Sping也提供了與它們的相整合的方案.
使用Spring,我們能夠減少類之間的依賴性和程式之間的耦合度,最大程度的實作松耦合,使程式更加靈活,可擴充性更強.
IOC,中文翻譯為"反轉控制,".DI->;"依賴注入"指的是:我們不必自己在程式代碼中維護對象的依賴關系,而是通過一個xml配置檔案,将類的屬性和執行個體悄悄的注入到類裡面.實作類的動态加載,使得類和類之間可以友善的切換(通過接口).
這種設計方式的思想表現為:高層子產品不應該依賴低層子產品,而是子產品都必須依賴于抽象.程式不應改依賴于實作,而是依賴于抽象接口.應用程式不要去找容器,而是容器給我們所有想要的對象.
Spring的另一個重要的方面是支援AOP的實作:
AOP的中文翻譯是:面向切面程式設計,也稱為面向問題程式設計.面向切面程式設計(aop)是對面向對象程式設計(oop)的補充,
面向對象程式設計将程式分解成各個層次的對象,面向切面程式設計将程式運作過程分解成各個切面。AOP從程式運作角度考慮程式的結構,提取業務處理過程的切面,oop是靜态的抽象,aop是動态的抽象,是對應用執行過程中的步驟進行抽象,進而獲得步驟之間的邏輯劃分。
aop架構具有的兩個特征:
1.各個步驟之間的良好隔離性2.源代碼無關性
2、Spring 注解
Spring 2.5 中除了提供 @Component 注釋外,還定義了幾個擁有特殊語義的注釋,它們分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,這 3 個注釋和 @Component 是等效的,但是從注釋類的命名上,很容易看出這 3 個注釋分别和持久層、業務層和控制層(Web 層)相對應。雖然目前這 3 個注釋和 @Component 相比沒有什麼新意,但 Spring 将在以後的版本中為它們添加特殊的功能。是以,如果 Web 應用程式采用了經典的三層分層結構的話,最好在持久層、業務層和控制層分别采用 @Repository、@Service 和 @Controller 對分層中的類進行注釋,而用 @Component 對那些比較中立的類進行注釋。
在 一個稍大的項目中,通常會有上百個元件,如果這些元件采用xml的bean定義來配置,顯然會增加配置檔案的體積,查找以及維護起來也不太友善。 Spring2.5為我們引入了元件自動掃描機制,他可以在類路徑底下尋找标注了 @Component,@Service,@Controller,@Repository注解的類,并把這些類納入進spring容器中管理。它的作用 和在xml檔案中使用bean節點配置元件時一樣的。
@Service用于标注業務層元件,
@Controller用于标注控制層元件(如struts中的action),
@Repository用于标注資料通路元件,即DAO元件,
@Component泛指元件,當元件不好歸類的時候,我們可以使用這個注解進行标注。
3、spring 的優點都有哪些?
1.降低了元件之間的耦合性 ,實作了軟體各層之間的解耦
2.可以使用容易提供的衆多服務,如事務管理,消息服務等
3.容器提供單例模式支援
4.容器提供了AOP技術,利用它很容易實作如權限攔截,運作期監控等功能
5.容器提供了衆多的輔助類,能加快應用的開發
6.spring對于主流的應用架構提供了內建支援,如hibernate,JPA,Struts等
7.spring屬于低侵入式設計,代碼的污染極低
8.獨立于各種應用伺服器
9.spring的DI機制降低了業務對象替換的複雜性
10.Spring的高度開放性,并不強制應用完全依賴于Spring,開發者可以自由選擇spring的部分或全部
4、Spring裡面如何配置資料庫驅動?
使用”org.springframework.jdbc.datasource.DriverManagerDataSource”資料源來配置資料庫驅動。
5、Spring裡面applicationContext.xml檔案能不能改成其他檔案名?
ContextLoaderListener是一個ServletContextListener, 它在你的web應用啟動的時候初始化。預設情況下, 它會在WEB-INF/applicationContext.xml檔案找Spring的配置。 你可以通過定義一個元素名字為”contextConfigLocation”來改變Spring配置檔案的位置。示例如下:
org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/xyz.xml
6、AOP裡面重要的幾個名詞概念解釋
切面(Aspect): 一個關注點的子產品化,這個關注點可能會橫切多個對象。事務管理是J2EE應用中一個關于橫切關注點的很好的例子。 在Spring AOP中,切面可以使用通用類(基于模式的風格) 或者在普通類中以 @Aspect 注解(@AspectJ風格)來實作。
連接配接點(Joinpoint): 在程式執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。 在Spring AOP中,一個連接配接點 總是 代表一個方法的執行。 通過聲明一個org.aspectj.lang.JoinPoint類型的參數可以使通知(Advice)的主體部分獲得連接配接點資訊。
通知(Advice): 在切面的某個特定的連接配接點(Joinpoint)上執行的動作。通知有各種類型,其中包括“around”、“before”和“after”等通知。 通知的類型将在後面部分進行讨論。許多AOP架構,包括Spring,都是以攔截器做通知模型, 并維護一個以連接配接點為中心的攔截器鍊。
切入點(Pointcut): 比對連接配接點(Joinpoint)的斷言。通知和一個切入點表達式關聯,并在滿足這個切入點的連接配接點上運作(例如,當執行某個特定名稱的方法時)。 切入點表達式如何和連接配接點比對是AOP的核心:Spring預設使用AspectJ切入點文法。
引入(Introduction): (也被稱為内部類型聲明(inter-type declaration))。聲明額外的方法或者某個類型的字段。 Spring允許引入新的接口(以及一個對應的實作)到任何被代理的對象。 例如,你可以使用一個引入來使bean實作 IsModified 接口,以便簡化緩存機制。