日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Spring框架系列之AOP思想

發(fā)布時(shí)間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring框架系列之AOP思想 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

微信公眾號(hào):compassblog

歡迎關(guān)注、轉(zhuǎn)發(fā),互相學(xué)習(xí),共同進(jìn)步!

有任何問(wèn)題,請(qǐng)后臺(tái)留言聯(lián)系!

1、AOP概述

(1)、什么是 AOP

AOP 為 Aspect Oriented Programming 的縮寫(xiě),意為“面向切面編程”。AOP 是 OOP (面向?qū)ο?#xff09;的延續(xù),可以對(duì)業(yè)務(wù)的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性和開(kāi)發(fā)效率。

(2)、AOP 思想圖解:橫向重復(fù),縱向切取

  • 過(guò)濾器

  • 攔截器

  • 事務(wù)管理

(3)、AOP 可以實(shí)現(xiàn)的功能

  • 權(quán)限驗(yàn)證

  • 日志記錄

  • 性能控制

  • 事務(wù)控制

(4)、AOP 底層實(shí)現(xiàn)的兩種代理機(jī)制

  • JDK的動(dòng)態(tài)代理 :針對(duì)實(shí)現(xiàn)了接口的類(lèi)產(chǎn)生代理

?

  • Cglib的動(dòng)態(tài)代理 :針對(duì)沒(méi)有實(shí)現(xiàn)接口的類(lèi)產(chǎn)生代理,應(yīng)用的是底層的字節(jié)碼增強(qiáng)的技術(shù)生成當(dāng)前類(lèi)的子類(lèi)對(duì)象

2、Spring底層AOP實(shí)現(xiàn)原理

(1)、 JDK 動(dòng)態(tài)代理增強(qiáng)一個(gè)類(lèi)中方法:被代理對(duì)象必須要實(shí)現(xiàn)接口,才能產(chǎn)生代理對(duì)象。如果沒(méi)有接口將不能使用動(dòng)態(tài)代理技術(shù)。

public class MyJDKProxy implements InvocationHandler { 

? ? private UserDao userDao;

? ? public MyJDKProxy(UserDao userDao) { ?
? ? ? ? this.userDao = userDao;
? ? }

? ?public UserDao createProxy(){
? ? ? ?UserDao ?userDaoProxy ?= ?(UserDao)Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(), this);
? ? ? ?return userDaoProxy;
? ?}

? ?@Override
? ?public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
? ?{
? ? ? ?if("save".equals(method.getName())){
? ? ? ? ? ?System.out.println("權(quán)限校驗(yàn)=============
? ? ? ?}
? ? ? ?return method.invoke(userDao, args);
? ?}
}

(2)、Cglib ?動(dòng)態(tài)代理增強(qiáng)一個(gè)類(lèi)中的方法:可以對(duì)任何類(lèi)生成代理,代理的原理是對(duì)目標(biāo)對(duì)象進(jìn)行繼承代理。如果目標(biāo)對(duì)象被final修飾,那么該類(lèi)無(wú)法被cglib代理。

public class MyCglibProxy implements MethodInterceptor{ 

? ?private CustomerDao customerDao;

? ?public MyCglibProxy(CustomerDao customerDao){ ?
? ? ? ?this.customerDao = customerDao;
}

? ? ?// 生成代理的方法:
? ?public CustomerDao createProxy(){
? ? ?// 創(chuàng)建Cglib的核心類(lèi):
? ?Enhancer enhancer = new Enhancer();
? ? ?// 設(shè)置父類(lèi):
? ? ?enhancer.setSuperclass(CustomerDao.class);
? ? ?// 設(shè)置回調(diào):
? ? ?enhancer.setCallback(this);
? ? ?// 生成代理:
? ? ?CustomerDao customerDaoProxy = (CustomerDao) enhancer.create(); ?
? ? ?return customerDaoProxy;
}

? ?@Override
? ?public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
? ?if("delete".equals(method.getName())){
? ? ? ?Object obj = methodProxy.invokeSuper(proxy, args);
? ? ? ?System.out.println("日志記錄================");
? ? ? ?return obj;
? ? ? ?}
? ? ? ?return methodProxy.invokeSuper(proxy, args);
? ?}
}

3、Spring 基于 AspectJ AOP 開(kāi)發(fā)的相關(guān)術(shù)語(yǔ)

  • Joinpoint(連接點(diǎn)):所謂連接點(diǎn)是指那些被攔截到的點(diǎn)。在 spring 中,這些點(diǎn)指的是方法,因?yàn)?spring 只支持方法類(lèi)型的連接點(diǎn)

  • Pointcut(切入點(diǎn)):所謂切入點(diǎn)是指我們要對(duì)哪些 Joinpoint 進(jìn)行攔截的定義

  • Advice(通知/增強(qiáng)):所謂通知是指攔截到 Joinpoint 之后所要做的事情就是通知,通知分為前置通知,后置通知,異常通知,最終通知,環(huán)繞通知(切面要完成的功能)

  • Introduction(引介):引介是一種特殊的通知,在不修改類(lèi)代碼的前提下, Introduction 可以在運(yùn)行期為類(lèi)動(dòng)態(tài)地添加一些方法或 Field

  • Target(目標(biāo)對(duì)象):代理的目標(biāo)對(duì)象

  • Weaving(織入):是指把增強(qiáng)應(yīng)用到目標(biāo)對(duì)象來(lái)創(chuàng)建新的代理對(duì)象的過(guò)程。spring 采用動(dòng)態(tài)代理織入,而 AspectJ 采用編譯期織入和類(lèi)裝在期織入

  • Proxy(代理):一個(gè)類(lèi)被 AOP 織入增強(qiáng)后,就產(chǎn)生一個(gè)結(jié)果代理類(lèi)

  • Aspect(切面):是切入點(diǎn)和通知(引介)的結(jié)合

您可能還喜歡:

  • Spring框架系列(二)之Bean的注解管理

  • 【SSH框架】之Spring系列(一)

  • 【SSH框架】之Hibernate系列(一)

  • 講講本人本專(zhuān)業(yè)找工作的那些事兒

  • 前端系列之JavaScript基礎(chǔ)知識(shí)概述

?

本系列后期仍會(huì)持續(xù)更新,歡迎關(guān)注!

?

如果你認(rèn)為這篇文章有用,歡迎轉(zhuǎn)發(fā)分享給你的好友!

本號(hào)文章可以任意轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處!

?

掃碼關(guān)注微信公眾號(hào),了解更多

轉(zhuǎn)載于:https://www.cnblogs.com/compassblog/p/8486478.html

總結(jié)

以上是生活随笔為你收集整理的Spring框架系列之AOP思想的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。