最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springAOP完整實現(xiàn)過程

 更新時間:2024年02月28日 10:50:41   作者:蘇汀star  
當你調(diào)用SimpleService類的doSomething方法時,上述的PerformanceAspect會自動攔截此調(diào)用,并且記錄該方法的執(zhí)行時間,這樣你就完成了一個針對Spring的AOP入門級案例,感興趣的朋友一起看看吧

前言

江湖陽哥曾經(jīng)說過這么句話:
使用技術(shù)在當前這個環(huán)境中無非就是這么幾步:
1、引入POM(maven)坐標
2、改yml(配置文件也可以是properties等等)
3、寫配置類或者在啟動類上加注解
4、寫代碼就完事

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、熟悉相關(guān)概念:

在Spring AOP中,注解是
定義切面(Aspects)、切點(Pointcuts)、通知(Advice)等的主要方式。
以下是Spring AOP中幾種常見的注解及其用途和如何使用:

1、@Aspect:

  • 作用:標識一個類為切面類。
  • 使用方式:將此注解標注在類上,這個類會包含切點和通知的定義。
  • 示例

示例:

@Aspect
public class MyAspect {
    // 切點和通知定義...
}

2、@Pointcut:

  • 作用:定義一個切點,即橫切關(guān)注點的入口,明確什么樣的方法調(diào)用會被攔截。
  • 使用方式:在方法聲明前使用此注解,并提供一個切點表達式,該方法本身通常是空方法,僅作為切點的引用。
  • 示例:
@Aspect
public class MyAspect {
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceMethod() {}
    // 其他通知...
}

3、@Before:

  • 作用:定義一個前置通知,在切點的方法執(zhí)行之前執(zhí)行。
  • 使用方式:將此注解放在一個方法上,該方法將在目標方法執(zhí)行前執(zhí)行。
  • 示例:

示例:

@Aspect
public class MyAspect {
    @Before("serviceMethod()")
    public void beforeServiceMethod() {
        // 前置邏輯...
    }
}

4、@AfterReturning:

  • 作用:定義一個返回后通知,如果切點的方法正常返回后執(zhí)行。
  • 使用方式:將此注解放在一個方法上,并通過該方法提供的參數(shù)記入返回的值。
  • 示例:
@Aspect
public class MyAspect {
    @AfterReturning(pointcut = "serviceMethod()", returning = "retVal")
    public void afterReturning(Object retVal) {
        // 處理返回值...
    }
}

5、@AfterThrowing:

  • 作用:定義一個異常通知,如果切點的方法拋出異常后執(zhí)行。
  • 使用方式:將此注解放在一個方法上,并可選地獲取拋出的異常。
  • 示例:
@Aspect
public class MyAspect {
    @AfterThrowing(pointcut = "serviceMethod()", throwing = "ex")
    public void afterThrowing(Exception ex) {
        // 異常處理...
    }
}

6、@After:

  • 作用:定義一個最終通知,無論切點的方法是正常返回還是拋出異常都會執(zhí)行。
  • 使用方式:將此注解放在一個方法上,該方法無論目標方法如何都會執(zhí)行。
  • 示例:

示例:

@Aspect
public class MyAspect {
    @After("serviceMethod()")
    public void afterServiceMethod() {
        // 最終邏輯...
    }
}

7、@Around:

  • 作用:定義一個環(huán)繞通知,可以自定義在目標方法前后執(zhí)行的邏輯,同時決定是否繼續(xù)執(zhí)行目標方法。
  • 使用方式:將此注解放在一個方法上,該方法需要返回一個Object,可能是目標方法的返回值,也可能是你自定義的返回值。你可以在此方法中直接調(diào)用目標方法。
  • 示例:
@Aspect
public class MyAspect {
    @Around("serviceMethod()")
    public Object aroundServiceMethod(ProceedingJoinPoint pjp) throws Throwable {
        // 前置邏輯...
        Object result = pjp.proceed(); // 執(zhí)行目標方法
        // 后置邏輯...
        return result;
    }
}

Spring AOP的使用通常有兩種方式:

通過注解驅(qū)動的方式:在配置類上使用 @EnableAspectJAutoProxy 注解開啟AOP支持,然后聲明切面類和相關(guān)注解。

通過XML配置的方式:在XML文件中定義 aop:config 元素,并在該元素內(nèi)部配置切面和通知。

通常情況下,注解驅(qū)動的方式更簡潔直觀,且是推薦的做法。不過,在某些用例或舊項目中,XML配置方式可能還是會用到。

二、具體使用case:

當然,讓我們以一個簡單的AOP用例為例,實現(xiàn)一個記錄方法執(zhí)行時間的切面。首先確保您的項目已經(jīng)加入了Spring AOP的相關(guān)依賴,例如,使用Maven時,您可以添加下列依賴到您的pom.xml文件:

1.pom文件

<!-- Spring AOP 依賴 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.3.18</version>
</dependency>
<!-- AOP聯(lián)盟API -->
<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>
<!-- Spring框架的一部分,用于處理AOP的代理 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.3.18</version>
</dependency>

2.代碼

現(xiàn)在,讓我們創(chuàng)建一個切面,該切面會記錄方法執(zhí)行的時間:

// 具有@Aspect注解的類會被Spring識別為一個切面
@Aspect
// 確保這個類被Spring的容器掃描到,通常它應該位于@ComponentScan指定的包或子包中
@Component
public class PerformanceAspect {
    // 切點表達式,這里是指任意返回值的Service層中的任意方法
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceMethod() {}
    // 環(huán)繞通知,讓我們可以在方法執(zhí)行前后添加自定義邏輯
    @Around("serviceMethod()")
    public Object profile(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis(); // 開始時間
        Object output = pjp.proceed(); // 執(zhí)行被代理的方法
        long elapsedTime = System.currentTimeMillis() - start; // 計算消耗的時間
        System.out.println("Method execution time: " + elapsedTime + " milliseconds.");
        return output; // 返回被代理方法的返回值
    }
}

然后,你需要在Spring的配置類加入如下內(nèi)容,以啟用AOP的自動代理功能:

@Configuration
@EnableAspectJAutoProxy
@ComponentScan("com.example") // 修改為你的包名
public class AppConfig {
    // 可以添加額外的Bean配置...
}

現(xiàn)在,你的AOP切面已經(jīng)準備好了。當你的程序運行時,任何匹配Pointcut(位于com.example.service包的任意方法)的方法都會被PerformanceAspect所攔截,它會在方法執(zhí)行前后記錄執(zhí)行時間,并將該時間打印到控制臺。
假設我們有一個簡單的服務類:

package com.example.service;
import org.springframework.stereotype.Service;
@Service
public class SimpleService {
    public void doSomething() {
        // 模擬業(yè)務邏輯處理時間
        try {
            Thread.sleep(1000); 
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

當你調(diào)用SimpleService類的doSomething方法時,上述的PerformanceAspect會自動攔截此調(diào)用,并且記錄該方法的執(zhí)行時間。這樣你就完成了一個針對Spring的AOP入門級案例。

總結(jié)

好了盡情的開發(fā)使用吧,其實這個是為了我寫那個面試題的文章準備的哈哈哈哈

到此這篇關(guān)于springAOP完整實現(xiàn)過程的文章就介紹到這了,更多相關(guān)springAOP實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring獲取管理對象常用方法詳解

    Spring獲取管理對象常用方法詳解

    這篇文章主要介紹了Spring獲取管理對象常用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java類如何實現(xiàn)一個類的障眼法(JadClipse的bug)

    Java類如何實現(xiàn)一個類的障眼法(JadClipse的bug)

    這篇文章主要介紹了Java類實現(xiàn)一個類的障眼法(JadClipse的bug),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java String創(chuàng)建對象實例解析

    Java String創(chuàng)建對象實例解析

    這篇文章主要介紹了Java String創(chuàng)建對象實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • springboot整合spring-data-redis遇到的坑

    springboot整合spring-data-redis遇到的坑

    使用springboot整合redis,使用默認的序列化配置,然后使用redis-client去查詢時查詢不到相應的key.問題出在哪,怎么解決呢?下面小編給大家?guī)砹藄pringboot整合spring-data-redis遇到的坑,需要的的朋友參考下吧
    2017-04-04
  • Java 二分查找的實現(xiàn)及圖例解析

    Java 二分查找的實現(xiàn)及圖例解析

    這篇文章主要介紹了Java 二分查找的實現(xiàn),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • idea中service或者mapper引入報紅的問題及解決

    idea中service或者mapper引入報紅的問題及解決

    在使用IntelliJ IDEA開發(fā)SpringBoot項目時,有時會遇到Service或Mapper接口引入時報紅但不影響項目運行的情況,這主要是因為IDEA的檢查級別設置問題,解決方法是將有問題的Error級別改為編譯通過的安全級別,即可消除報紅
    2024-09-09
  • Java實現(xiàn)JDBC連接數(shù)據(jù)庫簡單案例

    Java實現(xiàn)JDBC連接數(shù)據(jù)庫簡單案例

    這篇文章主要介紹了Java實現(xiàn)JDBC連接數(shù)據(jù)庫簡單案例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • SpringBoot整合JWT的入門指南

    SpringBoot整合JWT的入門指南

    JWT全稱是json web token,它將用戶信息加密到 token 里,服務器不保存任何用戶信息,服務器通過使用保存的密鑰驗證 token 的正確性,只要正確即通過驗證,這篇文章主要給大家介紹了關(guān)于SpringBoot整合JWT的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Java實現(xiàn)Html轉(zhuǎn)Pdf的方法

    Java實現(xiàn)Html轉(zhuǎn)Pdf的方法

    這篇文章主要介紹了Java實現(xiàn)Html轉(zhuǎn)Pdf的方法,實例分析了java基于ITextRenderer類操作頁面及系統(tǒng)自帶字體生成pdf文件的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java語言實現(xiàn)簡單FTP軟件 FTP上傳下載隊列窗口實現(xiàn)(7)

    Java語言實現(xiàn)簡單FTP軟件 FTP上傳下載隊列窗口實現(xiàn)(7)

    這篇文章主要為大家詳細介紹了Java語言實現(xiàn)簡單FTP軟件,F(xiàn)TP上傳下載隊列窗口的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

洛扎县| 东源县| 白银市| 林州市| 万安县| 巴马| 梧州市| 通辽市| 安福县| 武冈市| 观塘区| 上犹县| 宽甸| 光山县| 东丽区| 五大连池市| 浮梁县| 根河市| 遂川县| 福泉市| 曲麻莱县| 遵义县| 会东县| 合肥市| 胶州市| 贺州市| 射阳县| 金昌市| 洞头县| 图木舒克市| 河间市| 兴海县| 当涂县| 靖州| 崇明县| 浦城县| 莆田市| 吴川市| 万山特区| 黄龙县| 峨山|