欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

AspectJ簡(jiǎn)介

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

Spring AOP 回顧

什么是AspectJ

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

實(shí)現(xiàn)AOP的方式

原生使用切面

添加AOP坐標(biāo)

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

創(chuàng)建增強(qiáng)類MyAOP

對(duì)service層下的所有類的所有方法進(jìn)行增強(qiáng)

@Component
@Aspect
public class MyAOP {
    //定義切點(diǎn)
    @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("===>目標(biāo)方法:訂單業(yè)務(wù)ID:"+id);
        return "001202210121010";
    }
}

啟動(dòng)類測(cè)試

@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));
    }
}

無異常時(shí)

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

補(bǔ)充配置說明

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

通過注解使用切面

聲明注解NeedCut

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

切換注解

@Component
@Aspect
public class MyAOP {
    //定義切點(diǎn)
    @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("===>目標(biāo)方法:訂單業(yè)務(wù)ID:"+id);
        return "001202210121010";
    }
    public void add(){
        System.out.println("===>添加訂單");
    }
}

測(cè)試

@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注解的方法才進(jìn)行增強(qiáng)

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

相關(guān)文章

  • Java 多線程Synchronized和Lock的區(qū)別

    Java 多線程Synchronized和Lock的區(qū)別

    這篇文章主要介紹了Java 多線程Synchronized和Lock的區(qū)別,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Java打印九九乘法表代碼詳情

    Java打印九九乘法表代碼詳情

    這篇文章主要介紹了Java打印九九乘法表,使用了雙重for循環(huán),使用do{}while()實(shí)現(xiàn)打印九九乘法表這些好玩的語(yǔ)法實(shí)現(xiàn),感興趣的小伙伴可參考下面文章內(nèi)容
    2021-09-09
  • Java中內(nèi)存異常StackOverflowError與OutOfMemoryError詳解

    Java中內(nèi)存異常StackOverflowError與OutOfMemoryError詳解

    這篇文章主要介紹了 Java中內(nèi)存異常StackOverflowError與OutOfMemoryError詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • MyBatis實(shí)現(xiàn)萬能Map和模糊查詢

    MyBatis實(shí)現(xiàn)萬能Map和模糊查詢

    本文主要介紹了MyBatis實(shí)現(xiàn)萬能Map和模糊查詢,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù)的思路詳解

    mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù)的思路詳解

    這篇文章主要介紹了mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java咖啡館(1)——嘆咖啡

    Java咖啡館(1)——嘆咖啡

    這篇文章主要給大家介紹了關(guān)于Java咖啡館之嘆咖啡,需要的朋友可以參考下
    2006-12-12
  • Spring Boot中的@ConfigurationProperties注解解讀

    Spring Boot中的@ConfigurationProperties注解解讀

    在SpringBoot框架中,@ConfigurationProperties注解是處理外部配置的強(qiáng)大工具,它允許開發(fā)者將配置文件中的屬性自動(dòng)映射到Java類的字段上,實(shí)現(xiàn)配置的集中管理和類型安全,通過定義配置類并指定前綴,可以將配置文件中的屬性綁定到Java對(duì)象
    2024-10-10
  • spring中@Configuration和@Bean注解的用法

    spring中@Configuration和@Bean注解的用法

    這篇文章主要介紹了spring中@Configuration和@Bean注解的用法,@Configuration用于定義配置類,可替換xml配置文件,被注解的類內(nèi)部包含有一個(gè)或多個(gè)被@Bean注解的方法,需要的朋友可以參考下
    2023-05-05
  • 探索Java I/O 模型的演進(jìn)

    探索Java I/O 模型的演進(jìn)

    什么是同步?什么是異步?阻塞和非阻塞又有什么區(qū)別?本文先從 Unix 的 I/O 模型講起,介紹了5種常見的 I/O 模型。而后再引出 Java 的 I/O 模型的演進(jìn)過程,并用實(shí)例說明如何選擇合適的 Java I/O 模型來提高系統(tǒng)的并發(fā)量和可用性。,需要的朋友可以參考下
    2019-06-06
  • Spring Boot+Jpa多數(shù)據(jù)源配置的完整步驟

    Spring Boot+Jpa多數(shù)據(jù)源配置的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot+Jpa多數(shù)據(jù)源配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評(píng)論