java項目怎麼做aop,Java項目怎麼做讀寫分離

本文目錄一覽:

java開發中常用aop嗎

AOP切面算是比較理論的東西,使用較少,屬於總結出來的理論,大多數人都知道,但不會專門地使用,一般都是默認會操作。比如將一些通用的方法單獨寫一個類,這些都是寫代碼時候自己會用的,並不算是很特別、專門拿出來使用、研究的工具

工作中java開發,使用最多的為增刪改查,其次是用debug來調試程序解決問題,聯調測試等等。

介紹幾個JAVA的AOP框架開源項目

基於Java的簡單、動態、輕量級、強大的AOP框架。既強大又簡單,有助於更容易的集成AOP到新的或已存在的項目中。

AspectWerkz 主要特性: 

1. 運行時和載入時位元組碼修正:你可以在運行時或編譯時輕鬆的改造任何(舊)應用程序或除了rt.jar以外的外部類庫

2. 支持join point模型

3. 支持Annotation:匹配JavaDoc和JSR-175,支持用戶自定義Annotation

4. 支持部署多個Aspect定義文件到部署的應用程序(WEB-INF/aop.xml、META-INF/aop.xml)

5. Introduction/內類型聲明(也稱Mixin),也就是具有添加介面和實現到已存在的類中的能力

6. Annotation定義:定義Aspect使用的運行時Annotation(為JSR-175準備)

7. XML定義:定義Aspect使用的XML;XML可以用來精鍊、改寫和解析Annotation定義

8. 插件式Aspect管理器能夠和IoC框架(如Spring或PicoContainer)一起工作

9. 四種不同的Advice和Introduction部署模型(範圍):perJVM(單模式)、 perClass、perInstance 和perThread 

10. Advice和Introduction能夠動態部署、反部署或重新部署

11. 高性能,使用JIT編譯

12. 使用Fine-grained模式語言選擇join point

13. 所有Advice能夠和所有的join point和各種混合類型的pointcut

14. 離線變換(可以用作後處理器)

15. Aspect、Advice和Introduction使用POJO編碼 

16. 目標類可以是正規的POJO,也就是不需要介面

17. 支持通過定義傳遞參數給Advice和定義可重用的Advice堆棧

18. 元數據被加到類中

19. 簡單的用法和配置

AspectWerkz在Eclipse下的輔助開發插件→

更多AspectWerkz信息

JBoss AOP

JBoss 4.0帶了一個AOP框架。這個框架和JBoss應用伺服器緊密地結合,但是你也能夠在你的應用中,單獨的運行它。

更多JBoss AOP信息

Nanning

一個雖然簡單但也是一個java開源的AOP框架。名字以中文的拼音拼寫就是廣西的南寧。

更多Nanning信息

JAC

JAC (Java Aspect Components)是一個應用伺服器。它為Java2平台、用於Java開發的企業開發環境(J2EE)、和基於Web的分散式應用,提供開放式資源的又一個選擇(在GNU次常規公共許可證下發布)。JAC包括統一模型語言(UML)IDE,該UML IDE模塊化應用商業邏輯並且自動生成和編譯純商業邏輯Java類。這些類,在JAC容器內執行,可從一組技術和/或商業的橫切關係(crosscutting concerns)[1] 如數據持久性、認證、配置文件管理、訪問許可權檢測、演示、和負載平衡中無縫地受益。基於面向方面編程技術(AOP)的JAC將這些關係( concerns)[2]從應用程序的核心商業邏輯中分離出來。

更多JAC信息

DynamicAspects

DynamicAspects能夠讓你使用java編寫的面向切面的程序設計,它使用在Sun JDK 1.5中介紹的”instrumentation”與”agent”,Aspects能夠軟體各模塊之間的關係在運行期安裝與使用。

更多DynamicAspects信息

dynaop

dynaop框架使用一個基於運行時的編程機制將AOP代碼插入對象中,而不是返回一個具有特徵代碼的對象。AOP將是面向對象設計(OO)的一個新的領域。

更多dynaop信息

CAESAR

CAESAR是一個新的與Java兼容的AOP語言。所有java程序多能使用CAESAR。

更多CAESAR信息

PROSE

PROSE是一個動態編排(weaving)工具(允許在運行期插入或抽取aspects)。PROSE aspects是規則的Java對象能夠被發送到或從網路上的計算機接收。簽名可被用於保證它們的完整性。一旦一個aspect插入到JVM中,任何事件的發生將影響在相應aspect advice執行的結果。假如一個aspect從JVM中撤消,aspect代碼將被丟棄並且相應的攔截也將不會再發生。PROSE aspects是規則的Java對象能夠被發送到或從網路上的計算機接收。簽名可被用於保證它們的完整性。一旦一個aspect插入到JVM中,任何事件的發生將影響在相應aspect advice執行的結果。假如一個aspect從JVM中撤消,aspect代碼將被丟棄並且相應的攔截也將不會再發生。下圖是PROSE的體系結構圖:

更多PROSE信息

FastAOP

FastAOP是一個高性能AOP框架。最初開發該框架是為了支持對大型J2EE應用程序進行性能剖析和監測。它幾乎不佔用運行時間。FastAOP已經在Websphere和Jboss應用伺服器上得到成功測試。

更多FastAOP信息

Plastic

Plastic是一個構建在ASM 3.3之上的AOP工具包。支持類的基本載入和實例化。引進新的屬性。不需要使用反射就能夠訪問私有屬性和方法。重寫屬性訪問許可權。注入屬性。Method advice(在調用現在方法之後/之前執行一些邏輯)。DIV class=date收錄時間:2011-05-25 15:25:03/DIV

更多Plastic信息

如何用Java動態代理實現AOP

在目前的Java開發包中包含了對動態代理的支持,但是其實現只支持對介面的的實現。 其實現主要通過是java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler介面。 Proxy 類主要用來獲取動態代理對象,InvocationHandler介面用來約束調…

北大青鳥java培訓:動態SpringAOP的是如何實現的?

SpringAOP是利用代理模式,在運行時生成一個目標對象的代理,並且使用代理代替目標對象,整個過程對使用者透明,使用者無法像使用目標對象一樣使用代理對象,代理對象類型是目標對象所屬類的子類或者介面實現,寧夏IT培訓認為這個子類也是在運行時動態生成,這個生成子類的過程使用操作位元組碼技術,Spring框架中使用兩種位元組碼技術:JDK動態代理和CGLIB,當目標類實現了介面時使用JDK動態代理,否則使用CGLIB代理。

AOP的實現包含下面幾個步驟:根據配置或註解解析切面。

生成AOP代理對象,給目標對象生成一個代理類以及代理類實例,根據解析出的切面,生成通知鏈設置到代理對象,在代理的回調中會執行通知鏈。

把AOP代理對象註冊到容器中代替目標對象,當使用者向容器請求目標bean時,容器會返回代理對象。

 下面對這幾個步驟逐一的分析。

切面解析在分析切面解析過程之前,首先先了解一下幾個關鍵的介面,看下面的類圖。

PointCut:描述切點,在進行切點匹配時,使用ClassFilter進行類匹配,MethodMatcher進行執行方法匹配。

Advice:通知,AfterAdvice後通知,BeforeAdvice前通知,DynamicIntroductionAdvice引用通知,環繞通知通過Interceptor實現。

Advisor:通知器,也就是切面,PointcutAdvisor切點通知器,IntroductionAdvisor引用通知器。

 在創建AOP代理之前需要把相關的切面配置解析成上面類圖中的介面子類的對象,對於ProxyFactoryBean來說,沒有這個過程,因為這種方式下不能使用切點。

切面解析完成之後,把解析出的通知添加通知鏈中,AOP代理對象引用該通知鏈執行切面通知邏輯。

對於aop標籤方式和註解方式添加通知鏈這個動作的代碼是類似的,解析切面這個過程有些差異。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150394.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-08 14:53
下一篇 2024-11-08 14:53

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論