国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一文帶你迅速了解下Spring中的AOP

這篇具有很好參考價(jià)值的文章主要介紹了一文帶你迅速了解下Spring中的AOP。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 什么是AOP?

AOP(Aspect Oriented Programming):面向切面編程。
面向切面編程是一種思想,其實(shí)就是對(duì)某一類事情進(jìn)行統(tǒng)一的處理。而 SpringAOP就是一種AOP的具體實(shí)現(xiàn)的框架。這就好比 IOC 和 DI 一樣的關(guān)系。
一文帶你迅速了解下Spring中的AOP,SSM,spring,java,后端
上述就是對(duì)登錄功能進(jìn)行了一個(gè)統(tǒng)一的處理!

2. AOP能用來(lái)干些什么?

除了上面的判斷登錄之外,還有:

  • 統(tǒng)一日志記錄
  • 統(tǒng)一的方法執(zhí)行時(shí)間統(tǒng)計(jì)
  • 統(tǒng)一的返回格式設(shè)置
  • 統(tǒng)一的異常處理
  • 事務(wù)的開(kāi)啟和提交

3. 學(xué)習(xí)AOP

3.1 AOP的組成

3.1.1 切面(Aspect)

切面:定義的是事件,也就是AOP是用來(lái)做啥的。
例如:用來(lái)做用戶登錄校驗(yàn)

3.1.2 切點(diǎn)(Pointcut)

切點(diǎn):定義具體攔截規(guī)則。
例如:哪些接口需要判斷用戶登錄,哪些不需要

3.1.3 通知(Advice)

通知:定義AOP具體的執(zhí)行方法。
例如:從 Session 中獲取用戶信息,如果獲取到則是登錄,沒(méi)獲取到表示未登錄。

3.1.4 連接點(diǎn)(Jion Point)

連接點(diǎn):有可能觸發(fā)切點(diǎn)的所有點(diǎn),也就是所有接口。

3.2 SpringAOP實(shí)現(xiàn)

3.2.1 添加依賴

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

3.2.2 定義切面

@Aspect  // 表示這個(gè)為切面
@Component 
public class UserAspect {
}

上述中,@Aspect注解表示這個(gè)類為切面類。@Component表示這個(gè)類隨著SpringBoot啟動(dòng)而啟動(dòng)。

3.2.3 定義切點(diǎn)

@Aspect  // 表示這個(gè)為切面
@Component
public class UserAspect {

    // 定義切點(diǎn)
    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")
    public void pointcut(){}
}

使用@Pointcut注解進(jìn)行定義切點(diǎn),格式為 :
excution(<修飾符><返回類型><包.類.?法(參數(shù))><異常>) ,一般修飾符和異??墒÷浴?/p>

3.2.4 執(zhí)行通知

@Aspect  // 表示這個(gè)為切面
@Component
public class UserAspect {

    // 定義切點(diǎn)
    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")
    public void pointcut(){}

    // 前置通知
    @Before("pointcut()")
    public void doBefore(){
        System.out.println("執(zhí)行了前置通知");
    }

    // 后置通知
    @After("pointcut()")
    public void doAfter(){
        System.out.println("執(zhí)行了后置通知");
    }

    // 返回之后通知
    @AfterReturning(value = "pointcut()",returning = "")
    public void doAfterReturning(){
        System.out.println("執(zhí)行了返回之后通知");
    }

    // 異常通知
    @AfterThrowing("pointcut()")
    public void doAfterThrowing(){
        System.out.println("執(zhí)行了異常通知");
    }
    // 環(huán)繞通知
    @Around("pointcut()")
    public Object doAroud(ProceedingJoinPoint joinPoint){
        Object result = null;
        System.out.println("環(huán)繞通知執(zhí)行之前");
        try {
            // 執(zhí)行目標(biāo)方法
            result = joinPoint.proceed();
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
        System.out.println("環(huán)繞通知執(zhí)行之后");
        return result;
    }
}

可以通過(guò)下面看到執(zhí)行順序:
一文帶你迅速了解下Spring中的AOP,SSM,spring,java,后端

4. SpringAOP實(shí)現(xiàn)原理

SpringAOP是構(gòu)建在動(dòng)態(tài)代理的基礎(chǔ)上實(shí)現(xiàn)的,因此 Spring 對(duì) AOP 支持局限于方法級(jí)別上。

  • JDK Proxy:默認(rèn)情況下,實(shí)現(xiàn)了接口的類,使用 AOP 基于 JDK 生成代理類
  • CGLIB:默認(rèn)情況下,沒(méi)有實(shí)現(xiàn)接口的類,通過(guò)實(shí)現(xiàn)代理類的子類來(lái)實(shí)現(xiàn)動(dòng)態(tài)代理(被final修飾的類不能代理)
  • 兩者底層都是通過(guò)反射

JDK 和 CGLIB 區(qū)別:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-645253.html

  • JDK來(lái)自JAVA;CGLIB屬于三方
  • JDK:是通過(guò)實(shí)現(xiàn)類接口的類來(lái)生成代理類;CGLIB是通過(guò)實(shí)現(xiàn)了代理類的子類來(lái)實(shí)現(xiàn)動(dòng)態(tài)地理
  • JDK7之后版本,JDK Proxy性能高于 CGLIB;JDK7之前,CGLIB 性能遠(yuǎn)遠(yuǎn)高于 JDK Proxy

到了這里,關(guān)于一文帶你迅速了解下Spring中的AOP的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring與Mybatis集成且Aop整合(放飛雙手,迅速完成CRUD及分頁(yè))

    Spring與Mybatis集成且Aop整合(放飛雙手,迅速完成CRUD及分頁(yè))

    目錄 ?一、概述 二、集成 ( 1 ) 為什么 ( 2 ) 優(yōu)點(diǎn) ( 3 ) 實(shí)例 三、整合 3.1 講述 3.2 整合進(jìn)行分頁(yè) 帶我們帶來(lái)的收獲 集成是指將不同的組件、系統(tǒng)或框架整合在一起,使它們能夠協(xié)同工作,共同完成某個(gè)功能或提供某種服務(wù)。在軟件開(kāi)發(fā)中,集成通常指的是將多個(gè)獨(dú)立的模塊或

    2024年02月11日
    瀏覽(23)
  • 一文了解SpringBoot中的Aop

    一文了解SpringBoot中的Aop

    目錄 1.什么是Aop 2.相關(guān)概念 3.相關(guān)注解 4.為什么要用Aop 5.Aop使用案例 1.什么是Aop AOP :Aspect Oriented Programming, 面向切面 ,是Spring三大思想之一,另外兩個(gè)是 IOC-控制反轉(zhuǎn) DI-依賴注入 ( @Autowired、@Qualifier、@Resource ) 2.相關(guān)概念 切面(aspect): 橫切面對(duì)象,一般為一個(gè)具體類對(duì)象(可

    2024年02月11日
    瀏覽(22)
  • 深入了解 Spring boot的事務(wù)管理機(jī)制:掌握 Spring 事務(wù)的幾種傳播行為、隔離級(jí)別和回滾機(jī)制,理解 AOP 在事務(wù)管理中的應(yīng)用

    深入了解 Spring boot的事務(wù)管理機(jī)制:掌握 Spring 事務(wù)的幾種傳播行為、隔離級(jí)別和回滾機(jī)制,理解 AOP 在事務(wù)管理中的應(yīng)用

    ????歡迎光臨,終于等到你啦???? ??我是蘇澤,一位對(duì)技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門(mén)到入魔》 ?? 本專欄帶你從Spring入門(mén)到入魔 ? 這是蘇澤的個(gè)人主頁(yè)可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.csdn

    2024年03月21日
    瀏覽(24)
  • [SSM]Spring面向切面編程AOP

    [SSM]Spring面向切面編程AOP

    目錄 十五、面向切面編程AOP 15.1AOP介紹 15.2AOP的七大術(shù)語(yǔ) 15.3切點(diǎn)表達(dá)式 15.4使用Spring的AOP 15.4.1準(zhǔn)備工作 15.4.2基于AspectJ的AOP注解式開(kāi)發(fā) 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的實(shí)際案例:事務(wù)處理 15.6AOP的實(shí)際案例:安全日志 IoC使軟件組件松耦合。AOP讓你能夠捕捉系統(tǒng)中經(jīng)

    2024年02月15日
    瀏覽(28)
  • Spring之AOP(帶你一篇文章搞定AOP)

    Spring之AOP(帶你一篇文章搞定AOP)

    Spring的核心之一:AOP 用的依賴(包括上篇文章講訴的IOC依賴): AOP:面向切面編程。利用 AOP 可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開(kāi)發(fā)的效率。通俗來(lái)說(shuō)就是在不修改代碼的情況下添加新的功能

    2024年02月16日
    瀏覽(28)
  • 【Spring(十一)】萬(wàn)字帶你深入學(xué)習(xí)面向切面編程AOP

    【Spring(十一)】萬(wàn)字帶你深入學(xué)習(xí)面向切面編程AOP

    ??今天我們來(lái)學(xué)習(xí) AOP ,在最初我們學(xué)習(xí)Spring時(shí)說(shuō)過(guò)Spring的兩大特征,一個(gè)是 IOC ,一個(gè)是 AOP ,我們現(xiàn)在要學(xué)習(xí)的就是這個(gè)AOP。 ??AOP: 面向切面編程 ,一種編程范式,指導(dǎo)開(kāi)發(fā)者如何組織程序結(jié)構(gòu)。 ??作用:在不驚動(dòng)原始設(shè)計(jì)的基礎(chǔ)上為其進(jìn)行 功能增強(qiáng) 。 ??首先我們先

    2024年01月25日
    瀏覽(26)
  • 【MySQL】一文帶你了解MySQL中的子查詢

    【MySQL】一文帶你了解MySQL中的子查詢

    子查詢指一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句內(nèi)部的查詢,這個(gè)特性從MySQL 4.1開(kāi)始引入 。 SQL 中子查詢的使用大大增強(qiáng)了 SELECT 查詢的能力 ,因?yàn)楹芏鄷r(shí)候查詢需要從結(jié)果集中獲取數(shù)據(jù),或者需要從同一個(gè)表中先計(jì)算得出一個(gè)數(shù)據(jù)結(jié)果,然后與這個(gè)數(shù)據(jù)結(jié)果(可能是某個(gè)標(biāo)量

    2024年02月08日
    瀏覽(27)
  • MAVEN利器:一文帶你了解MAVEN中的依賴管理

    MAVEN利器:一文帶你了解MAVEN中的依賴管理

    強(qiáng)大的構(gòu)建工具——Maven。作為Java生態(tài)系統(tǒng)中的重要組成部分,Maven為開(kāi)發(fā)人員提供了一種簡(jiǎn)單而高效的方式來(lái)構(gòu)建、管理和發(fā)布Java項(xiàng)目。無(wú)論是小型項(xiàng)目還是大型企業(yè)級(jí)應(yīng)用,Maven都能幫助開(kāi)發(fā)人員輕松處理依賴管理、編譯、測(cè)試和部署等任務(wù)。 在上一篇文章中,我們學(xué)習(xí)

    2024年02月10日
    瀏覽(32)
  • 一文帶你深入了解算法筆記中的前綴與差分(附源碼)

    一文帶你深入了解算法筆記中的前綴與差分(附源碼)

    ??作者介紹:22級(jí)樹(shù)莓人(計(jì)算機(jī)專業(yè)),熱愛(ài)編程<目前在c++階段, 因?yàn)樽罱鼌⒓有滦怯?jì)劃算法賽道(白佬),所以加快了腳步,果然急迫感會(huì)增加動(dòng)力 ——目標(biāo)Windows,MySQL,Qt,數(shù)據(jù)結(jié)構(gòu)與算法,Linux,多線程,會(huì)持續(xù)分享學(xué)習(xí)成果和小項(xiàng)目的 ??作者主頁(yè):熱愛(ài)編程的

    2023年04月12日
    瀏覽(29)
  • 【Spring】一文帶你吃透IOC技術(shù)

    【Spring】一文帶你吃透IOC技術(shù)

    個(gè)人主頁(yè): 幾分醉意的CSDN博客_傳送門(mén) loC,Inversion ofControl: 控制反轉(zhuǎn),是一個(gè)理論,一個(gè)指導(dǎo)思想。指導(dǎo)開(kāi)發(fā)人員如何使用對(duì)象,管理對(duì)象的。把對(duì)象的創(chuàng)建,屬性賦值,對(duì)象的聲明周期都交給代碼之外的容器管理。 loC分為控制和反轉(zhuǎn) ?? ● 控制: 對(duì)象創(chuàng)建,屬性賦值,對(duì)

    2023年04月08日
    瀏覽(57)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包