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

SpringBoot AOP AspectJ切面技術(shù)介紹與實現(xiàn)方式

 更新時間:2022年10月26日 11:22:55   作者:沫洺  
這篇文章主要介紹了Springboot如何使用Aspectj實現(xiàn)AOP面向切面編程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

AspectJ簡介

  • 它不屬于spring;
  • AspectJ是一個AOP的框架;
  • 定義了AOP語法;
  • 有一個專門的編譯器用來生成遵守Java字節(jié)編碼規(guī)范的Class文件

Spring AOP 回顧

什么是AspectJ

  • AspectJ是使用面向切面的一個框架
  • 它擴展了Java語言(它本身也是一種語言)
  • 支持原生Java代碼 有自己的編譯器
  • 將代碼翻譯成Java字節(jié)碼文件
  • 是為了方便編寫AOP代碼而出現(xiàn)的
  • 使用AOP編程的三個重點 通知 切點 織入

實現(xiàn)AOP的方式

原生使用切面

添加AOP坐標

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

創(chuàng)建增強類MyAOP

對service層下的所有類的所有方法進行增強

@Component
@Aspect
public class MyAOP {
    //定義切點
    @Pointcut("execution(* com.moming.service.*.*(..))")
    public void point(){}
    @Before("point()")
    public void before(){
        System.out.println("===>前置通知");
    }
    @After("point()")
    public void after(){
        System.out.println("===>后置通知");
    }
    @Around("point()")
    public Object arround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("===>環(huán)繞前");
        Object resules = pjp.proceed();
        System.out.println("===>環(huán)繞后");
        return resules;
    }
    @AfterReturning(value = "point()",returning = "ret")
    public void returning(JoinPoint jp, String ret){
        Object[] args = jp.getArgs();
        System.out.println("返回后通知獲取參數(shù): "+Arrays.toString(args));
        System.out.println("===>返回后通知,返回值: "+ret);
    }
    @AfterThrowing("point()")
    public void throwing(){
        System.out.println("===>異常通知");
    }
}

service/OrderService

@Service
public class OrderService {
    public String order(int id){
        System.out.println("===>目標方法:訂單業(yè)務(wù)ID:"+id);
        return "001202210121010";
    }
}

啟動類測試

@SpringBootApplication
public class App2 {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
        OrderService bean = context.getBean(OrderService.class);
        System.out.println(bean.order(1));
    }
}

無異常時

有異常時,后續(xù)代碼就不再執(zhí)行了

補充配置說明

//兩種占位符
//* 代表的是一個單詞,b* 代表的是以b開頭的單詞。 例如 bds
//.. 通配符 ,代表的是0個或者多個匹配項

通過注解使用切面

聲明注解NeedCut

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface NeedCut {
}

切換注解

@Component
@Aspect
public class MyAOP {
    //定義切點
    @Pointcut("@annotation(com.moming.annotation.NeedCut)")
    public void point(){}
    @Before("point()")
    public void before(){
        System.out.println("===>前置通知");
    }
    @After("point()")
    public void after(){
        System.out.println("===>后置通知");
    }
    @Around("point()")
    public Object arround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("===>環(huán)繞前");
        Object resules = pjp.proceed();
        System.out.println("===>環(huán)繞后");
        return resules;
    }
    @AfterReturning(value = "point()",returning = "ret")
    public void returning(JoinPoint jp, String ret){
        Object[] args = jp.getArgs();
        System.out.println("返回后通知獲取參數(shù): "+Arrays.toString(args));
        System.out.println("===>返回后通知,返回值: "+ret);
    }
    @AfterThrowing("point()")
    public void throwing(){
        System.out.println("===>異常通知");
    }
}

使用注解@NeedCut

@Service
public class OrderService {
    @NeedCut
    public String order(int id){
        System.out.println("===>目標方法:訂單業(yè)務(wù)ID:"+id);
        return "001202210121010";
    }
    public void add(){
        System.out.println("===>添加訂單");
    }
}

測試

@SpringBootApplication
public class App2 {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
        OrderService bean = context.getBean(OrderService.class);
        System.out.println(bean.order(01));
        System.out.println("-------------------");
        bean.add();
    }
}

使用@NeedCut注解的方法才進行增強

到此這篇關(guān)于SpringBoot AOP AspectJ切面技術(shù)介紹與實現(xiàn)方式的文章就介紹到這了,更多相關(guān)SpringBoot AOP AspectJ切面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Ehcache緩存框架入門級使用實例

    Java Ehcache緩存框架入門級使用實例

    這篇文章主要介紹了Java Ehcache緩存框架入門級使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • Spring Boot中使用JDBC Templet的方法教程

    Spring Boot中使用JDBC Templet的方法教程

    這篇文章主要給大家介紹了關(guān)于在Spring Boot中使用JDBC Templet的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • java中BigDecimal進行加減乘除的基本用法

    java中BigDecimal進行加減乘除的基本用法

    大家應(yīng)該對于不需要任何準確計算精度的數(shù)字可以直接使用float或double運算,但是如果需要精確計算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進行大數(shù)的操作。下面這篇文章就給大家介紹介紹關(guān)于java中BigDecimal進行加減乘除的基本用法。
    2016-12-12
  • Java輸入/輸出流體系詳解

    Java輸入/輸出流體系詳解

    這篇文章主要介紹了Java輸入/輸出流體系詳解,涉及字節(jié)流和字符流,輸入輸出體系,轉(zhuǎn)換流,以及文件的讀寫等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 如何在不使用spring框架中使用aop的功能

    如何在不使用spring框架中使用aop的功能

    這篇文章主要介紹了如何在不使用spring框架中使用aop的功能,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • spring中@autowired、@Qualifier、@Primary注解的使用說明

    spring中@autowired、@Qualifier、@Primary注解的使用說明

    這篇文章主要介紹了spring中@autowired、@Qualifier、@Primary注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java Bigdecimal使用原理詳解

    Java Bigdecimal使用原理詳解

    這篇文章主要介紹了Java Bigdecimal使用原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java BeanUtils.copyProperties的詳解

    Java BeanUtils.copyProperties的詳解

    這篇文章主要介紹了Java BeanUtils.copyProperties的詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java通過Timer與TimerTask實現(xiàn)定時任務(wù)調(diào)度方式

    Java通過Timer與TimerTask實現(xiàn)定時任務(wù)調(diào)度方式

    本文介紹了如何在Java中使用`Timer`和`TimerTask`類來實現(xiàn)定時任務(wù)調(diào)度,`Timer`類用于創(chuàng)建計時器并安排任務(wù),而`TimerTask`類用于定義具體的任務(wù),文章詳細介紹了這兩個類的方法和使用示例,包括創(chuàng)建任務(wù)、安排任務(wù)、取消任務(wù)等操作,通過一個簡單的例子
    2024-12-12
  • 金三銀四復(fù)工高頻面試題java算法LeetCode396旋轉(zhuǎn)函數(shù)

    金三銀四復(fù)工高頻面試題java算法LeetCode396旋轉(zhuǎn)函數(shù)

    這篇文章主要為大家介紹了金三銀四復(fù)工高頻面試題之java算法題解LeetCode396旋轉(zhuǎn)函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

乐陵市| 桃江县| 奇台县| 长海县| 巴马| 福安市| 准格尔旗| 海兴县| 鸡西市| 万全县| 新密市| 紫云| 永昌县| 泾阳县| 高碑店市| 山阳县| 南雄市| 平原县| 滦平县| 大悟县| 安远县| 平谷区| 乳源| 徐汇区| 东乌珠穆沁旗| 眉山市| 固安县| 红河县| 剑河县| 高碑店市| 平舆县| 凤凰县| 五指山市| 岱山县| 岗巴县| 齐齐哈尔市| 大安市| 陕西省| 商河县| 祥云县| 邢台县|