日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Java AOP實踐指南:切面編程詳解

來源: 責(zé)編: 時間:2024-05-21 17:34:27 173觀看
導(dǎo)讀哈嘍,大家好,我是了不起。AOP就是面向切面編程,或者叫面向方面編程,或者開玩笑的說叫面向方便面編程,如果粗俗的理解,就是可以自定義注解,然后通過自己定義的方式定義注解的作用。什么是SpringAOPSpringAOP的全稱是(Aspect Or

哈嘍,大家好,我是了不起。PPm28資訊網(wǎng)——每日最新資訊28at.com

AOP就是面向切面編程,或者叫面向方面編程,或者開玩笑的說叫面向方便面編程,如果粗俗的理解,就是可以自定義注解,然后通過自己定義的方式定義注解的作用。PPm28資訊網(wǎng)——每日最新資訊28at.com

什么是SpringAOP

SpringAOP的全稱是(Aspect Oriented Programming)中文翻譯過來是面向切面編程,AOP是OOP的延續(xù),是軟件開發(fā)中的一個熱點,也是Spring框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。PPm28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片PPm28資訊網(wǎng)——每日最新資訊28at.com

AOP體系

圖片圖片PPm28資訊網(wǎng)——每日最新資訊28at.com

SpringAOP的應(yīng)用場景

  • 日志記錄
  • 權(quán)限驗證(SpringSecurity有使用)
  • 事務(wù)控制(調(diào)用方法前開啟事務(wù), 調(diào)用方法后提交關(guān)閉事務(wù) )
  • 效率檢查(檢測方法運行時間)
  • 數(shù)據(jù)源代理(seata里面,獲取到數(shù)據(jù)源連接執(zhí)行的sql)
  • 緩存優(yōu)化 (第一次調(diào)用查詢數(shù)據(jù)庫,將查詢結(jié)果放入內(nèi)存對象, 第二次調(diào)用, 直接從內(nèi)存對象返回,不需要查詢數(shù)據(jù)庫 )

Aop在 Spring 中的作用

提供聲明式事允許用戶自定義切面:PPm28資訊網(wǎng)——每日最新資訊28at.com

  • 橫切關(guān)注點:跨越應(yīng)用程序多個橫塊的方法或功能,即是,與我們業(yè)務(wù)邏輯無關(guān)的,但是我們需要關(guān)注的部分,就是橫切關(guān)注點。如日志,安全,緩存,事務(wù)等等.
  • 切面( ASPECT ):橫切關(guān)注點被模塊化的特殊對象,即,它是一個類。
  • 通知( Advice ):切面必須要完成的工作,即,它是類中的一個方法。
  • 目標(biāo)( Target ):被通知象·代理( Proxy ):向目標(biāo)對象應(yīng)用通知之后創(chuàng)建的對象
  • 切入點( PointCut ):切面通知執(zhí)行的"地點的定義
  • 連接點( JointPoint ):與切入點匹配的執(zhí)行點

圖片圖片PPm28資訊網(wǎng)——每日最新資訊28at.com

AOP的實現(xiàn)方式

使用AOP織入,需要導(dǎo)入一個依賴包:PPm28資訊網(wǎng)——每日最新資訊28at.com

<dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjweaver</artifactId>  <version>1.9.4</version></dependency>

使用方式

applicationContext.xml:PPm28資訊網(wǎng)——每日最新資訊28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd  ">  <!--注冊bean-->    <bean id="userService" class="service.UserServiceImpl"/>    <bean id="log" class="log.Log"/>    <bean id="afterLog" class="log.AfterLog"/>    <!--配置aop:需要導(dǎo)入aop的約束-->    <aop:config>        <!--切入點:expression:表達式,execution(要執(zhí)行的位置! * * * *)-->        <aop:pointcut id="pointcut" expression="execution(* service.UserServiceImpl.*(..))"></aop:pointcut>        <!--執(zhí)行環(huán)繞增加-->        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>        <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>    </aop:config></beans>

UserService接口:PPm28資訊網(wǎng)——每日最新資訊28at.com

public interface UserService {    public void add();    public void delete();    public void update();    public void select();}

UserServiceImpl實現(xiàn)類(切入點):PPm28資訊網(wǎng)——每日最新資訊28at.com

public class UserServiceImpl implements UserService{    @Override    public void add() {        System.out.println("增加了一個用戶");    }    @Override    public void delete() {        System.out.println("刪除了一個用戶");    }    @Override    public void update() {        System.out.println("更新了一個用戶");    }    @Override    public void select() {        System.out.println("查詢了一個用戶");    }}

前置通知:PPm28資訊網(wǎng)——每日最新資訊28at.com

import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;public class Log implements MethodBeforeAdvice {    //method:要執(zhí)行的目標(biāo)對象的方法    //args:參數(shù)    //target:目標(biāo)參數(shù)    @Override    public void before(Method method, Object[] args, Object target) throws Throwable {        System.out.println(target.getClass().getName()+"的"+method.getName()+"被執(zhí)行了");    }}

后置通知:PPm28資訊網(wǎng)——每日最新資訊28at.com

import org.springframework.aop.AfterReturningAdvice;import java.lang.reflect.Method;public class AfterLog implements AfterReturningAdvice {    //returnValue:返回值    @Override    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {        System.out.println("執(zhí)行了"+method.getName()+"方法返回結(jié)果為:"+ returnValue);    }}

測試類:PPm28資訊網(wǎng)——每日最新資訊28at.com

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import service.UserService;import service.UserServiceImpl;import java.lang.annotation.Annotation;public class MyTest {    public static void main(String[]  args) {        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        //動態(tài)代理的是接口        UserService userService = (UserService) context.getBean("userService");        userService.select();    }}

結(jié)語

通過本文的講解,我們深入了解了切面編程的核心概念、動態(tài)代理的實現(xiàn)原理,并通過一個實際的例子展示了使用Java AOP的完整過程。AOP可以幫助我們將橫切關(guān)注點(例如日志記錄、事務(wù)管理等)從核心業(yè)務(wù)邏輯中解耦出來,提高代碼的可維護性和重用性。同時,AOP也是實現(xiàn)設(shè)計模式和架構(gòu)思想的重要手段之一,我們在開發(fā)中可以靈活運用AOP來優(yōu)化代碼結(jié)構(gòu)并提高系統(tǒng)的整體性能。PPm28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-89717-0.htmlJava AOP實踐指南:切面編程詳解

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: DotNet開發(fā)之反射技術(shù)詳解

下一篇: Python Selenium:網(wǎng)頁自動化的利器

標(biāo)簽:
  • 熱門焦點
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質(zhì)?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產(chǎn)品是什么?——是智能音箱。 手機在執(zhí)行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動,畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實現(xiàn)原理和應(yīng)用
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國境內(nèi)的北坡路線。相
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業(yè)務(wù)走向消亡。騰訊在長音頻領(lǐng)域還在摸索。為
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
  • 中關(guān)村論壇11月25日開幕,15位諾獎級大咖將發(fā)表演講

    11月18日,記者從2022中關(guān)村論壇新聞發(fā)布會上獲悉,中關(guān)村論壇將于11月25至30日在京舉行。本屆中關(guān)村論壇由科學(xué)技術(shù)部、國家發(fā)展改革委、工業(yè)和信息化部、國務(wù)
Top 主站蜘蛛池模板: 安塞县| 普陀区| 乌鲁木齐市| 林口县| 南木林县| 吉安市| 苍南县| 二连浩特市| 吉安县| 大关县| 肥城市| 昌乐县| 邵阳县| 中阳县| 宜黄县| 米脂县| 襄垣县| 奉新县| 台南市| 库伦旗| 井冈山市| 陈巴尔虎旗| 始兴县| 平谷区| 合山市| 政和县| 黔江区| 灵武市| 天镇县| 潞城市| 收藏| 灌阳县| 喜德县| 元阳县| 凭祥市| 信宜市| 平阳县| 闻喜县| 德昌县| 奉化市| 渭南市|