官术网_书友最值得收藏!

3.1 Spring AOP簡介

本節主要介紹AOP的概念和作用,以及AOP中的相關術語,旨在讓讀者熟悉另一種編程方式,為后續學習打下基礎。

3.1.1 什么是AOP

AOP的全稱是Aspect-Oriented Programming,即面向切面編程(也稱面向方面編程),是面向對象編程(OOP)的一種補充,目前已成為一種比較成熟的編程方式。

在傳統的業務處理代碼中,通常都會進行事務處理、日志記錄等操作。雖然使用OOP可以通過組合或者繼承的方式來達到代碼的重用,但如果要實現某個功能(如日志記錄),相同的代碼仍然會分散到各個方法中。這樣,如果想要關閉某個功能,或者對其進行修改,就必須修改所有相關方法。這不但增加了開發人員的工作量,而且提高了代碼的出錯率。

為了解決這一問題,AOP思想隨之產生。AOP采取橫向抽取機制,將分散在各個方法中的重復代碼提取出來,然后在程序編譯或運行時再將這些提取出來的代碼應用到需要執行的地方。這種采用橫向抽取機制的方式,采用傳統的OOP思想顯然是無法辦到的,因為OOP只能實現父子關系的縱向重用。雖然AOP是一種新的編程思想,但卻不是OOP的替代品,它只是OOP的延伸和補充。

在AOP思想中,通過Aspect(切面)可以分別在不同類的方法中加入事務、日志、權限和異常等功能。

AOP的使用使開發人員在編寫業務邏輯時可以專心于核心業務,而不用過多地關注于其他業務邏輯的實現,這不但提高了開發效率,而且增強了代碼的可維護性。

目前流行的AOP框架有兩個,分別為Spring AOP和AspectJ。Spring AOP使用純Java實現,不需要專門的編譯過程和類加載器,在運行期間通過代理方式向目標類植入增強的代碼。AspectJ是一個基于Java語言的AOP框架,從Spring 2.0開始,Spring AOP引入了對AspectJ的支持,AspectJ擴展了Java語言,提供了一個專門的編譯器,在編譯時提供橫向代碼的植入。

3.1.2 AOP術語

在學習使用AOP之前,首先要了解一下AOP的專業術語。這些術語包括Aspect、Joinpoint、Pointcut、Advice、Target Object、Proxy和Weaving,對于這些專業術語的解釋,具體如下。

  •  Aspect(切面):在實際應用中,切面通常是指封裝的用于橫向插入系統功能(如事務、日志等)的類,該類要被Spring容器識別為切面,需要在配置文件中通過<bean>元素指定。
  •  Joinpoint(連接點):在程序執行過程中的某個階段點,它實際上是對象的一個操作,例如方法的調用或異常的拋出。在Spring AOP中,連接點就是指方法的調用。
  •  Pointcut(切入點):是指切面與程序流程的交叉點,即那些需要處理的連接點。通常在程序中,切入點指的是類或者方法名,如某個通知要應用到所有以add開頭的方法中,那么所有滿足這一規則的方法都是切入點。
  •  Advice(通知增強處理):AOP框架在特定的切入點執行增強處理,即在定義好的切入點處所要執行的程序代碼。可以將其理解為切面類中的方法,它是切面的具體實現。
  •  Target Object(目標對象):是指所有被通知的對象,也稱為被增強對象。如果AOP框架采用的是動態的AOP實現,那么該對象就是一個被代理對象。
  •  Proxy(代理):將通知應用到目標對象之后,被動態創建的對象。
  •  Weaving(織入):將切面代碼插入目標對象上,從而生成代理對象的過程。
主站蜘蛛池模板: 萨迦县| 青田县| 平远县| 财经| 乳山市| 桂东县| 隆子县| 红原县| 威海市| 杭锦旗| 武强县| 法库县| 襄城县| 石狮市| 中阳县| 青龙| 清水县| 遂溪县| 手机| 谷城县| 荔浦县| 潞城市| 射洪县| 吉隆县| 丽水市| 剑河县| 玉田县| 上蔡县| 漾濞| 齐齐哈尔市| 灌阳县| 绥阳县| 哈巴河县| 中宁县| 固阳县| 无棣县| 丹东市| 阿拉善左旗| 许昌县| 宜宾县| 襄城县|