AOP原理講解

AOP(Aspect-OrientedProgramming,面向方面編程),能夠說是OOP(Object-Oriented Programing,面向對象編程)的補充和完善。OOP引入封裝、繼承和多態性等概念來創建一種對象層次結構,用以模擬公共行爲的一個集合。當咱們須要爲分散的對象引入公共行爲的時候,OOP則顯得無能爲力。也就是說,OOP容許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌代碼每每水平地散佈在全部對象層次中,而與它所散佈到的對象的核心功能毫無關係。對於其餘類型的代碼,如安全性、異常處理和透明的持續性也是如此。這種散佈在各處的無關的代碼被稱爲橫切(cross-cutting)代碼,在OOP設計中,它致使了大量代碼的重複,而不利於各個模塊的重用。數據庫

而AOP技術則偏偏相反,它利用一種稱爲「橫切」的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行爲封裝到一個可重用模塊,並將其名爲「Aspect」,即方面。所謂「方面」,簡單地說,就是將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可操做性和可維護性。AOP表明的是一個橫向的關係,若是說「對象」是一個空心的圓柱體,其中封裝的是對象的屬性和行爲;那麼面向方面編程的方法,就彷彿一把利刃,將這些空心圓柱體剖開,以得到其內部的消息。而剖開的切面,也就是所謂的「方面」了。而後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡。編程

 

使用「橫切」技術,AOP把軟件系統分爲兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的一個特色是,他們常常發生在覈心關注點的多處,而各處都基本類似。好比權限認證、日誌、事務處理。Aop 的做用在於分離系統中的各類關注點,將核心關注點和橫切關注點分離開來。正如Avanade公司的高級方案構架師Adam Magee所說,AOP的核心思想就是「將應用程序中的商業邏輯同對其提供支持的通用服務進行分離。」緩存

實現AOP的技術,主要分爲兩大類:一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行爲的執行;二是採用靜態織入的方式,引入特定的語法建立「方面」,從而使得編譯器能夠在編譯期間織入有關「方面」的代碼。
安全

AOP使用場景:性能優化

Authentication 權限session

Caching 緩存框架

Context passing 內容傳遞性能

Error handling 錯誤處理優化

Lazy loading 懶加載spa

Debugging  調試

logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準

Performance optimization 性能優化

Persistence  持久化

Resource pooling 資源池

Synchronization 同步

Transactions 事務

hibernate緩存介紹

經過Session的beginTransaction()方法能夠獲得一個對象的實例。主要用於管理實務。一個事物對象可能會包括多個對數據庫進行的操做。

hibernate的緩存:爲了提升系統性能,hibernate也使用了緩存機制。在hibernate框架中,主要包含兩個方面的緩存,一級緩存和二級緩存。hibernate緩存的做用主要表如今如下兩個方面: 1 經過主鍵(ID)加載數據的時候 2延遲加載中。

一級緩存:hibernate的一級緩存是由session提供的,所以它只存在session的生命週期中。也就是說session關閉的時候該session所管理的一級緩存也隨之被清除。hibernate的一級緩存是session所內置的,不能被卸載,也不能進行任何配置。一級緩存採用的是Key-Value的MAP方式來實現的。在緩存實體對象時,對象的主關鍵字ID是MAP的Key,實體對象就是對象的值。因此說一級緩存是以實體對象爲單位進行存儲的。訪問的時候使用的是主鍵關鍵字ID。一級緩存使用的是自動維護的功能。但能夠經過session提供的手動方法對一級緩存的管理進行手動干預。evict()方法用於將某個對象從session的一級緩存中清除。clear()方法用於將session緩存中的方法所有清除。

二級緩存:SessionFactory提供的緩存機制能夠將緩存分爲內置緩存和外置緩存。內置緩存存放了映射文件中數據的副本和預約義SQL語句。SessionFactory的外置緩存就是咱們的二級緩存。它是一個可配置的插件,默認狀況下SessionFactory不會啓用這個插件,外置緩存的數據是數據庫數據的副本。外置緩存的介質能夠是內存或者硬盤。二級緩存的實現原理與一級緩存是同樣的。也是經過Key-Value的Map來實現對對象的緩存。二級緩存是做用在SessionFactory範圍內的。所以它比一級緩存的範圍更廣。它可被全部的Session對象所共享。須要注意的是放入緩存中的數據不能有第三方的應用對數據進行修改。

Hibernate實體對象的生命週期

實體對象的生命週期主要存在三種不一樣狀態:瞬態、持久態和遊離態。

瞬態:表示該實體對象在內存中是自由自在的。與數據庫中的數據沒有任何關係。與session沒有任何關係,也就是沒有經過session的實例對其任何持久化的操做。

持久態:該實體對象處於hibernate框架所管理的狀態。也就是說這個對象是與session的實體對象相關的。處於持久態的實體對象的特徵就是其所做的任何的變動操做都將被Hibernate持久化到數據庫中。咱們能夠說持久態的週期與其對應的session的週期息息相關的。hibernate會依據處於持久態的實體對象的屬性變化而改變數據庫中的對應記錄。

遊離態:處於持久態的實體對象,當再也不與其對應的session對象相關聯時,就處於遊離態

相關文章
相關標籤/搜索