日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
AOP思想應(yīng)該怎么去理解!

我們都知道,在面試的時(shí)候,很多面試官喜歡問基礎(chǔ)的知識(shí),但是基礎(chǔ)的內(nèi)容說的都是AOP的理論,然后問到實(shí)際講解 Spring 的 AOP 的時(shí)候,卻又問的不是那么的細(xì)致,因?yàn)楫吘故敲嬖?,但是?dāng)你面試一些稍微大型的公司的時(shí)候,他們就喜歡刨根問底的詢問一些你了解的 AOP 都應(yīng)用在哪些地方,又是怎么使用,今天阿粉就來(lái)說說這個(gè) Spring 的 AOP 是怎么使用的。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、石林網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、石林網(wǎng)絡(luò)營(yíng)銷、石林企業(yè)策劃、石林品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供石林建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

AOP 思想

在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方 式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中的一個(gè) 熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對(duì)業(yè)務(wù)邏輯 的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高 了開發(fā)的效率。

上面所說的是百度百科給出的提供信息,其實(shí)用通俗的講,他就是一個(gè)模型,也是一種思想,是用來(lái)讓自己的代碼的耦合度降低的一個(gè)思想,因?yàn)槲覀儾还苁菍懘a還是寫對(duì)應(yīng)的業(yè)務(wù)邏輯,都要有一個(gè)思想,那就是高內(nèi)聚,低耦合的思想,只有保持了這種思想,我們才能寫出相對(duì)優(yōu)質(zhì)的代碼,而 AOP 則是要我們對(duì)這個(gè)思想體現(xiàn)出來(lái)。

那么 AOP 是什么呢?

AOP 怎么理解

AOP 俗稱,面向切面編程,我們也都知道在面試的時(shí)候,這么說是肯定沒錯(cuò)的,那么接下來(lái)面試官的問題就是 AOP 一般都應(yīng)用在什么地方,比如說是在自己的項(xiàng)目中,AOP都應(yīng)用在哪些地方,是怎么應(yīng)用的,然后再根據(jù)你說的應(yīng)用,繼續(xù)往下問。

其實(shí)理解的話,那就是面向切面編程,就是我們對(duì)一個(gè)縱向的代碼,進(jìn)行橫向的抽取,抽取出來(lái)的意義則是我們對(duì)自己的業(yè)務(wù)做一些相應(yīng)的改變,但是不修改本質(zhì)的內(nèi)容,這就是 AOP 在我們項(xiàng)目中最多的意義。

AOP 的相關(guān)概念

Aspect(切面): Aspect 聲明類似于 Java 中的類聲明,在 Aspect 中會(huì)包含著一些 Pointcut 以及相應(yīng)的 Advice。

Joint point(連接點(diǎn)):表示在程序中明確定義的點(diǎn),典型的包括方法調(diào)用,對(duì)類成員的訪問以及異常處理程序塊的執(zhí)行等等,它自身還可以嵌套其它 joint point。

Pointcut(切點(diǎn)):表示一組 joint point,這些 joint point 或是通過邏輯關(guān)系組合起來(lái),或是通過通配、正則表達(dá)式等方式集中起來(lái),它定義了相應(yīng)的 Advice 將要發(fā)生的地方。

Advice(增強(qiáng)):Advice 定義了在 Pointcut 里面定義的程序點(diǎn)具體要做的操作,它通過 before、after 和 around 來(lái)區(qū)別是在每個(gè) joint point 之前、之后還是代替執(zhí)行的代碼。

Target(目標(biāo)對(duì)象):織入 Advice 的目標(biāo)對(duì)象。

Weaving(織入):將 Aspect 和其他對(duì)象連接起來(lái), 并創(chuàng)建 Adviced object 的過程

上面說的這些內(nèi)容全都是一些比較官方的術(shù)語(yǔ),官方講解的內(nèi)容就是上面這些,也是面試的時(shí)候說的最多的內(nèi)容,那么 AOP 這個(gè)思想,是怎么應(yīng)用的呢?

AOP 的應(yīng)用

接下來(lái)阿粉整個(gè)簡(jiǎn)單的應(yīng)用來(lái)熟悉一下這個(gè) AOP 的典型應(yīng)用。

首先,引入相關(guān)依賴:

    
org.springframework.boot
spring-boot-starter-web
2.4.4



org.springframework.boot
spring-boot-starter-aop

接著我們創(chuàng)建一個(gè) Controller 和 Service 類

@Service
@Slf4j
public class UserService {

public void save() {
log.info("saving data!");
}
}
@Controller
@RequestMapping("demo/")
public class DemoController {

final UserService userService;

public DemoController(UserService userService) {
this.userService = userService;
}

/**
* 模擬 AOP
*/
@RequestMapping("/aop")
@ResponseBody
public void aopTest() {
userService.save();
}
}

接著我們構(gòu)建出一個(gè)切面類

@Aspect
@Component
@Slf4j
public class UserServiceAspect {

/**
* 環(huán)繞切面
*/
@Around("execution(* com.computer.fundamentals.networkprogram.service.UserService.*(..))")
public void saveHandle(ProceedingJoinPoint proceedingJoinPoint) {
log.info("start");

Object result;
try {
result = proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
log.info("server error");
}

log.info("end");
}

}

然后我們做個(gè)測(cè)試,直接訪問接口看一下我們的打印日志,

2021-11-01 10:07:11.887  INFO 12052 --- [nio-8080-exec-1] c.c.f.n.service.aop.UserServiceAspect    : start
2021-11-01 10:07:11.894 INFO 12052 --- [nio-8080-exec-1] c.c.f.n.service.UserService : saving data!
2021-11-01 10:07:11.894 INFO 12052 --- [nio-8080-exec-1] c.c.f.n.service.aop.UserServiceAspect : end

這樣我們自己受用就實(shí)現(xiàn)了一個(gè) AOP 的操作,那么 Spring 中,都有什么會(huì)應(yīng)用到這個(gè) AOP 思想呢?

AOP 思想的應(yīng)用

AOP 的應(yīng)用場(chǎng)景:

  • 日志打印
  • 全局異常攔截
  • 統(tǒng)一返回值
  • 多數(shù)據(jù)源的切換

上述的場(chǎng)景,都是 AOP 的典型應(yīng)用,目的是什么都很清楚,在不影響代碼業(yè)務(wù)邏輯的情況下完成一些相對(duì)比較好的操作,這樣就能完美的實(shí)現(xiàn)了 AOP 思想。

至于怎么實(shí)現(xiàn)日志,阿粉都不用多說,百度上隨便都能抄一份,自己手動(dòng)敲一下代碼,就完全沒毛病了,你對(duì) AOP 還有什么不了解的呢?


名稱欄目:AOP思想應(yīng)該怎么去理解!
轉(zhuǎn)載來(lái)于:http://m.5511xx.com/article/dpoipos.html