成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

AOP思想應該怎么去理解!

開發 架構
在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方 式和運行期動態代理實現程序功能的統一維護的一種技術。

我們都知道,在面試的時候,很多面試官喜歡問基礎的知識,但是基礎的內容說的都是AOP的理論,然后問到實際講解 Spring 的 AOP 的時候,卻又問的不是那么的細致,因為畢竟是面試,但是當你面試一些稍微大型的公司的時候,他們就喜歡刨根問底的詢問一些你了解的 AOP 都應用在哪些地方,又是怎么使用,今天阿粉就來說說這個 Spring 的 AOP 是怎么使用的。

AOP 思想

在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方 式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個 熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。利用AOP可以對業務邏輯 的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高 了開發的效率。

上面所說的是百度百科給出的提供信息,其實用通俗的講,他就是一個模型,也是一種思想,是用來讓自己的代碼的耦合度降低的一個思想,因為我們不管是寫代碼還是寫對應的業務邏輯,都要有一個思想,那就是高內聚,低耦合的思想,只有保持了這種思想,我們才能寫出相對優質的代碼,而 AOP 則是要我們對這個思想體現出來。

圖片

那么 AOP 是什么呢?

AOP 怎么理解

AOP 俗稱,面向切面編程,我們也都知道在面試的時候,這么說是肯定沒錯的,那么接下來面試官的問題就是 AOP 一般都應用在什么地方,比如說是在自己的項目中,AOP都應用在哪些地方,是怎么應用的,然后再根據你說的應用,繼續往下問。

其實理解的話,那就是面向切面編程,就是我們對一個縱向的代碼,進行橫向的抽取,抽取出來的意義則是我們對自己的業務做一些相應的改變,但是不修改本質的內容,這就是 AOP 在我們項目中最多的意義。

圖片

AOP 的相關概念

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

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

Pointcut(切點):表示一組 joint point,這些 joint point 或是通過邏輯關系組合起來,或是通過通配、正則表達式等方式集中起來,它定義了相應的 Advice 將要發生的地方。

Advice(增強):Advice 定義了在 Pointcut 里面定義的程序點具體要做的操作,它通過 before、after 和 around 來區別是在每個 joint point 之前、之后還是代替執行的代碼。

Target(目標對象):織入 Advice 的目標對象。

Weaving(織入):將 Aspect 和其他對象連接起來, 并創建 Adviced object 的過程

上面說的這些內容全都是一些比較官方的術語,官方講解的內容就是上面這些,也是面試的時候說的最多的內容,那么 AOP 這個思想,是怎么應用的呢?

AOP 的應用

接下來阿粉整個簡單的應用來熟悉一下這個 AOP 的典型應用。

首先,引入相關依賴:

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.4</version>
</dependency>
<!-- aop 依賴, aspectj -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

接著我們創建一個 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();
}
}

接著我們構建出一個切面類

@Aspect
@Component
@Slf4j
public class UserServiceAspect {

/**
* 環繞切面
*/
@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");
}

}

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

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

這樣我們自己受用就實現了一個 AOP 的操作,那么 Spring 中,都有什么會應用到這個 AOP 思想呢?

AOP 思想的應用

AOP 的應用場景:

  • 日志打印
  • 全局異常攔截
  • 統一返回值
  • 多數據源的切換

上述的場景,都是 AOP 的典型應用,目的是什么都很清楚,在不影響代碼業務邏輯的情況下完成一些相對比較好的操作,這樣就能完美的實現了 AOP 思想。

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

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-11-16 08:31:12

AOPRocketMQ組件

2024-02-27 17:50:16

平均負載Linux

2021-07-28 20:13:04

響應式編程

2015-08-27 09:12:58

大數據

2022-04-20 08:30:05

技術業務服務

2013-08-06 09:42:59

技術人員面試

2017-02-06 13:32:12

微信小程序思想

2022-07-07 08:00:51

Java內存模型

2021-05-06 18:17:52

SpringAOP理解

2011-07-19 11:35:09

linux網絡協議

2009-04-09 10:16:43

Oracle架構基礎

2011-05-18 09:47:39

spring

2023-07-11 08:25:19

AOP對象編程

2019-02-13 19:00:01

深度學習機器學習人工神經

2021-01-11 15:02:27

Redis數據庫命令

2021-08-30 11:43:46

程序員技能開發者

2021-03-04 09:11:57

日志開發打印

2023-02-03 09:52:10

開發者框架GoFrame

2023-03-29 08:24:30

2012-08-27 15:25:41

移動App移動應用App
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久福利一牛影视 | 亚洲国产精品va在线看黑人 | 又爽又黄axxx片免费观看 | 亚洲乱码国产乱码精品精98午夜 | 午夜影院在线观看 | 91精品国产综合久久精品 | 九九99九九精彩46 | 国产一区三区在线 | 免费观看一区二区三区毛片 | 欧美一级片免费看 | 亚洲人成人一区二区在线观看 | 一区二区三区观看视频 | av在线视 | 亚洲国产成人精品女人久久久 | 性网站免费 | 亚洲精品国产综合区久久久久久久 | 精品久久久久久国产 | 九九热这里只有精品在线观看 | 久久精品在线免费视频 | 国产精品日产欧美久久久久 | 日韩av福利在线观看 | 亚洲高清在线 | 九九精品网 | 久久久久久久久久毛片 | 91精品一区 | 一级免费视频 | 成人性视频免费网站 | 国产精品一区二区无线 | 一级特黄网站 | 香蕉视频91 | ww 255hh 在线观看 | 欧美日韩视频在线播放 | 亚洲小视频 | 中文字幕中文字幕 | 午夜国产| 久久久久久91 | www.日本在线观看 | 天天草夜夜骑 | 九九99精品 | 午夜精品久久久久久久久久久久久 | 国产欧美日韩在线观看 |