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

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)

這篇具有很好參考價(jià)值的文章主要介紹了Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. Spring AOP 是什么

學(xué)習(xí) Spring AOP 之前,先要了解 AOP 是什么

AOP(Aspect Oriented Programming):面向切面編程,它和 OOP(面向?qū)ο缶幊蹋╊愃啤?/p>

它是一種思想,是對(duì)某一類事情的集中處理。

比如用戶登錄權(quán)限的效驗(yàn),在學(xué)習(xí) AOP 之前,在需要判斷用戶登錄的頁(yè)面,都要各自實(shí)現(xiàn)或調(diào)用用戶驗(yàn)證的方法,學(xué)習(xí) AOP 之后,我們只需要在某一處配置一下,那么所有需要判斷用戶登錄的頁(yè)面就全部可以實(shí)現(xiàn)用戶登錄驗(yàn)證了,不用在每個(gè)方法中都寫用戶登錄驗(yàn)證了

AOP 是一種思想,而 Spring AOP 是實(shí)現(xiàn)(框架),這種關(guān)系和 IOC(思想)與 DI(實(shí)現(xiàn))類似


2. 為什么要用 AOP

  1. 高頻:對(duì)于這種功能統(tǒng)一,且使用地方較多的功能,可以考慮用 AOP 來處理(比如 用戶登錄驗(yàn)證)
  2. 使? AOP 可以擴(kuò)充多個(gè)對(duì)象的某個(gè)能?,AOP 可以說是 OOP 的補(bǔ)充和完善(比如 現(xiàn)在要實(shí)現(xiàn)的業(yè)務(wù)和這個(gè)通用的功能沒什么關(guān)系,但處于安全考慮,又必須進(jìn)行登錄的驗(yàn)證)

除了統(tǒng)一的用戶登錄判斷外,AOP 還可以實(shí)現(xiàn)

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

3. 怎么學(xué) Spring AOP

Spring AOP 學(xué)習(xí)主要分為3個(gè)部分

  1. 學(xué)習(xí) AOP 是如何組成的
  2. 學(xué)習(xí) Spring AOP 使用
  3. 學(xué)習(xí) Spring AOP 實(shí)現(xiàn)原理

4. AOP 組成

(1)切面(Aspect)

定義 AOP 是針對(duì)某個(gè)統(tǒng)一的功能的,這個(gè)功能就叫做一個(gè)切面,比如用戶登錄功能或方法的統(tǒng)計(jì)日志,他們就各是一個(gè)切面。切面是由切點(diǎn)和通知組成的

(2)連接點(diǎn)(Join Point)

所有可能觸發(fā) AOP(攔截方法的點(diǎn))就稱為連接點(diǎn)

(3)切點(diǎn)(Pointcut)

切點(diǎn)的作用就是提供一組規(guī)則來匹配連接點(diǎn),給滿足規(guī)則的連接點(diǎn)添加通知,總的來說就是,定義 AOP 攔截的規(guī)則的

切點(diǎn)相當(dāng)于保存了眾多連接點(diǎn)的一個(gè)集合(如果把切點(diǎn)看成一個(gè)表,而連接點(diǎn)就是表中一條一條的數(shù)據(jù))

(4)通知(Advice)

切面的工作就是通知

通知:規(guī)定了 AOP 執(zhí)行的時(shí)機(jī)和執(zhí)行的方法

Spring 切面類中,可以在方法上使用以下注解,會(huì)設(shè)置方法為通知方法,在滿足條件后悔通知本方法進(jìn)行調(diào)用

  1. 前置通知 @Before:通知方法會(huì)在目標(biāo)方法調(diào)用之前執(zhí)行
  2. 后置通知 @After:通知方法會(huì)在目標(biāo)方法返回或者拋出異常后調(diào)用
  3. 返回之后通知 @AfterReturning:通知方法會(huì)在目標(biāo)方法返回后調(diào)用
  4. 拋異常后通知:@AfterThrowing:通知方法會(huì)在目標(biāo)方法爬出異常之后調(diào)用
  5. 環(huán)繞通知:@Around:通知包裹了被通知的方法,在被通知的方法通知之前和調(diào)用之后執(zhí)行自定義的行為

舉個(gè)例子,在一個(gè)生產(chǎn)型公司中

通知相當(dāng)于底層的執(zhí)行者,切點(diǎn)是小領(lǐng)導(dǎo)制定規(guī)則,切面是大領(lǐng)導(dǎo)制定公司的發(fā)展方向,連接點(diǎn)是屬于一個(gè)普通的消費(fèi)者用戶

以多個(gè)??都要訪問?戶登錄權(quán)限為例子,AOP 整個(gè)組成部分如圖所示

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)


5. Spring AOP 實(shí)現(xiàn)

Spring AOP 實(shí)現(xiàn)步驟

  1. 添加 Spring AOP 框架支持
  2. 定義切面和切點(diǎn)
  3. 實(shí)現(xiàn)通知

接下來我們使? Spring AOP 來實(shí)現(xiàn)?下 AOP 的功能,完成的?標(biāo)是攔截所有 UserController ??的

?法,每次調(diào)? UserController 中任意?個(gè)?法時(shí),都執(zhí)?相應(yīng)的通知事件。

5.1 添加 Spring AOP 框架支持

在中央倉(cāng)庫(kù)中搜鎖 Spring AOP Maven Repository: Search/Browse/Explore (mvnrepository.com)

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)

在 pom.xml 中添加如下配置:

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

5.2 定義切面和切點(diǎn)

@Aspect // 當(dāng)前類是一個(gè)切面
@Component
public class UserAspect {
    // 定義一個(gè)切點(diǎn)(設(shè)置攔截規(guī)則)
    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")
    public void pointcut() {
    }
}

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)

5.3 實(shí)現(xiàn)通知方法

  1. 前置通知 @Before:通知方法會(huì)在目標(biāo)方法調(diào)用之前執(zhí)行
  2. 后置通知 @After:通知方法會(huì)在目標(biāo)方法返回或者拋出異常后調(diào)用
  3. 返回之后通知 @AfterReturning:通知方法會(huì)在目標(biāo)方法返回后調(diào)用
  4. 拋異常后通知:@AfterThrowing:通知方法會(huì)在目標(biāo)方法爬出異常之后調(diào)用
  5. 環(huán)繞通知:@Around:通知包裹了被通知的方法,在被通知的方法通知之前和調(diào)用之后執(zhí)行自定義的行為

實(shí)現(xiàn)通知方法也就是在什么時(shí)機(jī)執(zhí)行什么方法

@Aspect // 當(dāng)前類是一個(gè)切面
@Component
public class UserAspect {
    // 定義一個(gè)切點(diǎn)(設(shè)置攔截規(guī)則)
    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")
    public void pointcut() {
    }

    // 定義 pointcut 切點(diǎn)的前置通知
    @Before("pointcut()")
    public void doBefore() {
        System.out.println("執(zhí)行前置通知");
    }

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

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

    // 拋出異常之后通知
    @AfterThrowing("pointcut()")
    public void doAfterThrowing() {
        System.out.println("執(zhí)行拋出異常之后通知");
    }
}
@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/sayhi")
    public String sayHi() {
        System.out.println("sayhi 方法被執(zhí)行");
        int num = 10/0;
        return "你好,java";
    }

    @RequestMapping("/sayhi2")
    public String sayHi2() {
        System.out.println("sayhi2 方法被執(zhí)行");
        return "你好,java2";
    }
}

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)

環(huán)繞通知:@Around:通知包裹了被通知的方法,在被通知的方法通知之前和調(diào)用之后執(zhí)行自定義的行為

// 添加環(huán)繞通知
@Around("pointcut()")
public Object doAround(ProceedingJoinPoint joinPoint) {
    Object result = null;
    System.out.println("環(huán)繞通知:前置方法");
    try {
        // 執(zhí)行攔截方法
        result = joinPoint.proceed();
    } catch (Throwable e) {
        e.printStackTrace();
    }
    System.out.println("環(huán)繞通知:后置方法");
    return result;
}

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)

5.4 使? AOP 統(tǒng)計(jì) UserController 每個(gè)?法的執(zhí)?時(shí)間 StopWatch

Spring AOP 中統(tǒng)計(jì)時(shí)間用 StopWatch 對(duì)象

    // 添加環(huán)繞通知
    @Around("pointcut()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        // spring 中的時(shí)間統(tǒng)計(jì)對(duì)象
        StopWatch stopWatch = new StopWatch();
        Object result = null;
        try {
            stopWatch.start(); // 統(tǒng)計(jì)方法的執(zhí)行時(shí)間,開始計(jì)時(shí)
            // 執(zhí)行目標(biāo)方法,以及目標(biāo)方法所對(duì)應(yīng)的相應(yīng)通知
            result = joinPoint.proceed();
            stopWatch.stop(); // 統(tǒng)計(jì)方法的執(zhí)行時(shí)間,停止計(jì)時(shí)
        } catch (Throwable e) {
            e.printStackTrace();
        }
        System.out.println(joinPoint.getSignature().getDeclaringTypeName() + "." +
                joinPoint.getSignature().getName() +
                "執(zhí)行花費(fèi)的時(shí)間:" + stopWatch.getTotalTimeMillis() + "ms");
        return result;
    }

5.4 切點(diǎn)表達(dá)式說明 AspectJ

AspectJ 表達(dá)式語法:SpringAOP & AspectJ

    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")

AspectJ 語法(Spring AOP 切點(diǎn)的匹配語法):

切點(diǎn)表達(dá)式由切點(diǎn)函數(shù)組成,其中 execution() 是最常?的切點(diǎn)函數(shù),?來匹配?法,語法為:

execution(<修飾符><返回類型><包.類.?法(參數(shù))><異常>)

AspectJ ?持三種通配符

* :匹配任意字符,只匹配?個(gè)元素(包,類,或?法,?法參數(shù))

… :匹配任意字符,可以匹配多個(gè)元素 ,在表示類時(shí),必須和 * 聯(lián)合使?。

+ :表示按照類型匹配指定類的所有類,必須跟在類名后?,如 com.cad.Car+ ,表示繼承該類的所有?類包括本身

修飾符,一般省略

  • public 公共方法
  • *任意

返回值,不能省略

  • void 返回沒有值
  • String 返回值字符串
  • *任意

包,通常不省略,但可以省略

  • com.gyf.crm 固定包
  • com.gyf.crm.*.service crm 包下面子包任意(例如:com.gyf.crm.staff.service)
  • com.gyf.crm… crm 包下面的所有子包(含自己)
  • com.gyf.crm.*service… crm 包下面任意子包,固定目錄 service,service 目錄任意包

類,通常不省略,但可以省略

UserServiceImpl 指定類

*Impl 以 Impl 結(jié)尾

User* 以 User 開頭

*任意

方法名,不能省略

addUser 固定方法

add* 以 add 開頭

*DO 以 DO 結(jié)尾

*任意

參數(shù)

() 無參

(int) 一個(gè)整形

(int,int)兩個(gè)整型

(…) 參數(shù)任意

throws可省略,一般不寫

表達(dá)式示例

  • execution(* com.cad.demo.User.*(…)) :匹配 User 類?的所有?法
  • execution(* com.cad.demo.User+.*(…)) :匹配該類的?類包括該類的所有?法
  • execution(* com.cad..(…)) :匹配 com.cad 包下的所有類的所有?法
  • execution(* com.cad….(…)) :匹配 com.cad 包下、?孫包下所有類的所有?法
  • execution(* addUser(String, int)) :匹配 addUser ?法,且第?個(gè)參數(shù)類型是 String,第?個(gè)參數(shù)類型是 int

6. Spring AOP 實(shí)現(xiàn)原理

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

Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)

Spring AOP 動(dòng)態(tài)代理實(shí)現(xiàn):

默認(rèn)情況下,實(shí)現(xiàn)了接?的類,使? AOP 會(huì)基于 JDK ?成代理類,沒有實(shí)現(xiàn)接?的類,會(huì)基于 CGLIB ?成代理類

  1. JDK Proxy(JDK 動(dòng)態(tài)代理)

  2. CGLIB Proxy:默認(rèn)情況下 Spring AOP 都會(huì)采用 CGLIB 來實(shí)現(xiàn)動(dòng)態(tài)代理,因?yàn)樾矢?/p>

    CGLIB 實(shí)現(xiàn)原理:通過繼承代理對(duì)象來實(shí)現(xiàn)動(dòng)態(tài)代理的(子類擁有父類的所有功能)

    CGLIB 缺點(diǎn):不能代理最終類(也就是被 final 修飾的類)

6.1 生成代理的時(shí)機(jī) :織入(Weaving)

織入是把切面應(yīng)用到目標(biāo)對(duì)象并創(chuàng)建新的代理對(duì)象的過程,切面在指定的連接點(diǎn)被織入到目標(biāo)對(duì)象中

在目標(biāo)對(duì)象的生命周期中有多個(gè)點(diǎn)可以進(jìn)行織入

  1. 編譯期:切面在目標(biāo)類編譯時(shí)被織入,這種方法需要特殊的編譯器,AspectJ 的織入編譯器就是以這種方式織入切面的
  2. 類加載期:切面在目標(biāo)類加載到 JVM 時(shí)被織入,這種方式需要特殊的類加載器,它可以在目標(biāo)類被引入應(yīng)用之前增強(qiáng)該目標(biāo)類的字節(jié)碼,AspectJ5 的加載時(shí)織入 (load-time weaving. LTW)就支持以這種方式織入切面
  3. 運(yùn)行期:切面在應(yīng)用運(yùn)行的某一時(shí)刻被織入,一般情況下,在織入切面時(shí),AOP容器會(huì)為目標(biāo)對(duì)象動(dòng)態(tài)創(chuàng)建一個(gè)代理對(duì)象,Spring AOP 就是以這種方式織入切面的

6.2 JDK 動(dòng)態(tài)代理實(shí)現(xiàn)

JDK 動(dòng)態(tài)代理就是依靠反射來實(shí)現(xiàn)的文章來源地址http://www.zghlxwxcb.cn/news/detail-434631.html

//動(dòng)態(tài)代理:使?JDK提供的api(InvocationHandler、Proxy實(shí)現(xiàn)),此種?式實(shí)現(xiàn),要求被
代理類必須實(shí)現(xiàn)接?
public class PayServiceJDKInvocationHandler implements InvocationHandler {
 
 	//?標(biāo)對(duì)象即就是被代理對(duì)象
 	private Object target;
 
 	public PayServiceJDKInvocationHandler( Object target) {
		 this.target = target;
 	}
 
	//proxy代理對(duì)象
 	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		 //1.安全檢查
		 System.out.println("安全檢查");
		 //2.記錄?志
		 System.out.println("記錄?志");
 		//3.時(shí)間統(tǒng)計(jì)開始
 		System.out.println("記錄開始時(shí)間");
 		//通過反射調(diào)?被代理類的?法
 		Object retVal = method.invoke(target, args);
 		//4.時(shí)間統(tǒng)計(jì)結(jié)束
 		System.out.println("記錄結(jié)束時(shí)間");
 		return retVal;
 	}
 	public static void main(String[] args) {
 		PayService target= new AliPayService();
 		//?法調(diào)?處理器
 		InvocationHandler handler = new PayServiceJDKInvocationHandler(target);
		//創(chuàng)建?個(gè)代理類:通過被代理類、被代理實(shí)現(xiàn)的接?、?法調(diào)?處理器來創(chuàng)建
 		PayService proxy = (PayService) Proxy.newProxyInstance(
		 target.getClass().getClassLoader(),new Class[]{PayService.class},handler);
 		proxy.pay();
 	}
}

6.3 CGLIB 動(dòng)態(tài)代理實(shí)現(xiàn)

public class PayServiceCGLIBInterceptor implements MethodInterceptor {
 	//被代理對(duì)象
	 private Object target;
 
	 public PayServiceCGLIBInterceptor(Object target){
	 	this.target = target;
 	 }
 
	 @Override
	 public Object intercept(Object o, Method method, Object[] args, MethodProxymethodProxy)throws Throwable {
 		 //1.安全檢查
		 System.out.println("安全檢查");
		 //2.記錄?志
 		System.out.println("記錄?志");
		 //3.時(shí)間統(tǒng)計(jì)開始
 		System.out.println("記錄開始時(shí)間");
         //通過cglib的代理?法調(diào)?
 		Object retVal = methodProxy.invoke(target, args);
		 //4.時(shí)間統(tǒng)計(jì)結(jié)束
		System.out.println("記錄結(jié)束時(shí)間");
		return retVal;
 	}
 
	 public static void main(String[] args) {
		 PayService target= new AliPayService();
 		PayService proxy= (PayService) Enhancer.create(target.getClass(),
                   new PayServiceCGLIBInterceptor(target));
         proxy.pay();
 	 }
}

6.4 JDK 和 CGLIB 實(shí)現(xiàn)的區(qū)別

  1. JDK 實(shí)現(xiàn),要求被代理類必須實(shí)現(xiàn)接口,之后是通過 InvocationHander 及 Proxy,在運(yùn)行時(shí)動(dòng)態(tài)的在內(nèi)存中生成了代理對(duì)象,該代理對(duì)象是通過實(shí)現(xiàn)同樣的接口實(shí)現(xiàn)(類似靜態(tài)代理接口實(shí)現(xiàn)的方式),只是該代理類是在運(yùn)行期時(shí),動(dòng)態(tài)的織入統(tǒng)一的業(yè)務(wù)邏輯字節(jié)碼來完成的
  2. CGLIB 實(shí)現(xiàn),被代理類可以不實(shí)現(xiàn)接口,是通過繼承被代理類,在運(yùn)行時(shí)動(dòng)態(tài)的生成代理類對(duì)象,這種方式實(shí)現(xiàn)方式效率高

到了這里,關(guān)于Spring AOP(AOP概念、組成、Spring AOP實(shí)現(xiàn)及實(shí)現(xiàn)原理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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 AOP的原理與實(shí)現(xiàn)

    Spring AOP的原理與實(shí)現(xiàn)

    前言: 博主在最近的幾次面試中,大中小廠都問到了Spring的AOP思想相關(guān)問題,這塊知識(shí)確實(shí)是面試中的重點(diǎn)內(nèi)容,因此結(jié)合所看的書籍,在這篇文章中總結(jié)下。該專欄比較適合剛?cè)肟覬ava的小白以及準(zhǔn)備秋招的大佬閱讀,感謝大佬的關(guān)注。 如果文章有什么需要改進(jìn)的地方歡迎

    2024年02月13日
    瀏覽(27)
  • 【Spring】Spring AOP入門及實(shí)現(xiàn)原理剖析

    【Spring】Spring AOP入門及實(shí)現(xiàn)原理剖析

    AOP (Aspect-Oriented Programming) 是一種編程范式,它提供一種將程序中的橫切關(guān)注點(diǎn)模塊化的方式。橫切關(guān)注點(diǎn)可以是日志、事務(wù)、安全等,它們不屬于業(yè)務(wù)邏輯,但是又必須要與業(yè)務(wù)邏輯緊密耦合在一起。在 AOP 中,我們將這些橫切關(guān)注點(diǎn)稱為“切面”,它們獨(dú)立于業(yè)務(wù)邏輯模塊

    2024年02月17日
    瀏覽(59)
  • 【Spring】Spring AOP 初識(shí)及實(shí)現(xiàn)原理解析

    【Spring】Spring AOP 初識(shí)及實(shí)現(xiàn)原理解析

    博主簡(jiǎn)介:想進(jìn)大廠的打工人 博主主頁(yè): @xyk: 所屬專欄:?JavaEE進(jìn)階 ? 目錄 文章目錄 一、初識(shí)AOP 1.1 什么是AOP? 1.2 AOP的組成 1.2.1 切面(Aspect) 1.2.2 切點(diǎn)(Pointcut) 1.2.3?連接點(diǎn)(Join Point) 1.2.4 通知(Advice) 1.3 AOP的使用場(chǎng)景 二、Srping AOP 實(shí)現(xiàn) 2.1 添加Spring AOP 依賴 2.2 定義切

    2024年02月13日
    瀏覽(43)
  • Spring AOP 實(shí)現(xiàn)原理和使用場(chǎng)景

    Spring AOP 是通過在目標(biāo)方法執(zhí)行前、執(zhí)行后、拋出異常時(shí)等切入點(diǎn)執(zhí)行切面代碼的一種機(jī)制。其實(shí)現(xiàn)原理是使用動(dòng)態(tài)代理技術(shù),在方法運(yùn)行時(shí)動(dòng)態(tài)生成代理對(duì)象,然后插入切面代碼。當(dāng)執(zhí)行目標(biāo)方法時(shí),由動(dòng)態(tài)代理對(duì)象攔截方法并在適當(dāng)?shù)臅r(shí)間點(diǎn)執(zhí)行切面代碼,然后再調(diào)用實(shí)

    2024年02月05日
    瀏覽(46)
  • 114、Spring AOP是如何實(shí)現(xiàn)的?它和AspectJ有什么區(qū)別?

    其實(shí),AOP只是一種編程思想,表示面向切面編程,如果想實(shí)現(xiàn)這種思想,可以使用動(dòng)態(tài)代理啊,第三方的框架 AspectJ啊等等。 Spring AOP是利用的動(dòng)態(tài)代理機(jī)制 如果一個(gè)Bean實(shí)現(xiàn)了接口,那么就會(huì)采用JDK動(dòng)態(tài)代理來生成該接口的代理對(duì)象 如果一個(gè)Bean沒有實(shí)現(xiàn)接口,那么就會(huì)采用

    2024年02月14日
    瀏覽(18)
  • Spring AOP 的概念及其作用

    Spring AOP 的概念及其作用

    在介紹 Spring AOP 之前,首先要了解一下什么是 AOP ? AOP ( Aspect Oriented Programming ):面向切面編程,它是一種思想, 它是對(duì)某一類事情的集中處 理 。比如用戶登錄權(quán)限的效驗(yàn),沒學(xué) AOP 之前,我們所有需要判斷用戶登錄的頁(yè)面(中的方法),都要各自實(shí)現(xiàn)或調(diào)用用戶驗(yàn)證的

    2024年02月15日
    瀏覽(17)
  • Spring FrameWork從入門到NB - Spring AOP - 概念

    什么是AOP AOP - Aspect Oriented Programming的縮寫,面向切面編程。 面向切面編程AOP是面向?qū)ο蟪绦蛟O(shè)計(jì)OOP的一個(gè)補(bǔ)充或擴(kuò)展,是為了解決OOP在一些共性問題上的不足應(yīng)運(yùn)而生的。比如記錄日志、事務(wù)處理、性能分析等等與業(yè)務(wù)無關(guān)的需求,需要發(fā)生在很多類的很多方法上,而需求

    2024年02月13日
    瀏覽(21)
  • Spring Boot學(xué)習(xí)隨筆- 實(shí)現(xiàn)AOP(JoinPoint、ProceedingJoinPoint、自定義注解類實(shí)現(xiàn)切面)

    Spring Boot學(xué)習(xí)隨筆- 實(shí)現(xiàn)AOP(JoinPoint、ProceedingJoinPoint、自定義注解類實(shí)現(xiàn)切面)

    學(xué)習(xí)視頻:【編程不良人】2021年SpringBoot最新最全教程 問題 現(xiàn)有業(yè)務(wù)層開發(fā)存在問題 額外功能代碼存在大量冗余 每個(gè)方法都需要書寫一遍額外功能代碼不利于項(xiàng)目維護(hù) Spring中的AOP AOP:Aspect 切面 + Oriented 面向 Programmaing 面向切面編程 Aspect(切面) = Advice(通知) + Pointcut(

    2024年02月04日
    瀏覽(43)
  • 計(jì)算機(jī)組成原理中各種字長(zhǎng)的概念

    計(jì)算機(jī)組成原理中各種字長(zhǎng)的概念

    字長(zhǎng):默認(rèn)是機(jī)器字長(zhǎng) 1 機(jī)器字長(zhǎng):計(jì)算機(jī)能直接處理的二進(jìn)制數(shù)據(jù)位數(shù) 存儲(chǔ)字長(zhǎng):每個(gè)存儲(chǔ)單元能存放的二進(jìn)制數(shù)據(jù)位數(shù) 指令字長(zhǎng):每條指令包含的二進(jìn)制數(shù)據(jù)位數(shù) 各種硬件的位數(shù)與它要做的工作相關(guān),總結(jié)如下: 硬件 位數(shù) ALU 機(jī)器字長(zhǎng) 通用寄存器 機(jī)器字長(zhǎng) IR 指令字長(zhǎng)

    2024年02月06日
    瀏覽(27)
  • 邊緣計(jì)算是什么?邊緣計(jì)算系統(tǒng)的組成及概念

    邊緣計(jì)算是什么?邊緣計(jì)算系統(tǒng)的組成及概念

    來源:大數(shù)據(jù)DT 1946年在美國(guó)賓夕法尼亞大學(xué),電子晶體管計(jì)算機(jī)ENIAC攜170平方米、18000個(gè)晶體管的龐大身軀悄然問世,作為計(jì)算的載體,開啟了現(xiàn)代計(jì)算機(jī)的發(fā)展之路。 此后,晶體管代替了電子管,集成電路代替了晶體管,計(jì)算機(jī)的發(fā)展沿著摩爾定律的軌道一路狂奔,從巨大

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包