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

Spring系列之AOP的理解和分析

開發 架構
今天是五一收假以來的第一天,距離下一周一共還有四天,這周主要是對Spring的重學習。這四天內我將從以下幾個角度進行分析和理解。

 [[397684]]

今天是五一收假以來的第一天,距離下一周一共還有四天,這周主要是對Spring的重學習。這四天內我將從以下幾個角度進行分析和理解。

(1)AOP的理解和分析

(2)IOC的理解和分析

(3)對bean的理解和分析

(4)spring配置文件的理解和分析

首先今天對AOP的理解和分析,對aop的理解也分開闡述,對一個技術的思考,基本上都是從上學時候課本闡述一個新知識的順序進行的。第一:什么是AOP?

第二:為什么要引入AOP?或者是AOP解決了什么問題?

第三:如何簡單的實現AOP?

第四:AOP對我們寫代碼時候的思考和幫助是什么?

現在,開始對AOP進行闡述,

1 什么是AOP?

1.1 概念介紹

Spring的使命是簡化Java代碼開發,aop作為Spring的一個子模塊,也不例外。

AOP 是 Aspect Oriented Programming(面向切面編程) 的簡稱,和OOP(面向對象編程)一樣是一種編程思想,是對OOP的一種補充。

如何理解什么是AOP呢?以日志為例,在很多管理系統,比如訂單系統、推送系統等等都需要把日志記錄下來。如果每個業務邏輯里面都寫日志的相關代碼,那就重復太多了。

干脆把日志的相關邏輯代碼,統一封裝起來。然后在需要的地方嵌入即可。AOP也主要就是做嵌入這件事的。看下面這張圖。

新增訂單編輯訂單取消訂單推送訂單日志事務

AOP旨在將橫切關注點(crosscutting concern)從業務主體邏輯中進行剝離,實現關注點分離,以提高程序的模塊化程度(及業務模塊只需關注業務邏輯,無需關注日志、安全、事務等通用邏輯)

上面提到了一些名詞,比如說,切面、關注點、橫切等,下面對這些名詞進行解釋。

1.2 名詞解釋

AOP有自己的一套術語,我們必須了解一下這些行話,才能更好地理解AOP。為了方便大家理解,下面將用課代表收作業作為例子。

通知 (Advice)

定義了在收作業前后需要做的事。常見的通知類型有:before、after、after-returning、around等。

連接點 (JoinPoint)

連接點指程序運行時允許插入切面的一個點,可以是一個函數、一個包路徑、一個類、或者拋出的異常。有點類似于可以收作業的時間點。

切點(PointCut)

切點用于定義切面的位置,也就是捕獲哪些連接點的調用然后執行"通知"的操作(什么地點)。

切面(Aspect)

切面是切點和通知的聚合,定義了在哪一個切點做什么通知。

目標對象( Target )

指被切面織入的對象。

引入(Introduction)

引入允許我們向現有的類添加新方法或屬性。

織入(Weaving)

織入是把切面應用到切點對應的連接點的過程。切面在指定連接點被織入到目標對象中。

具體關系使用圖形化表示是:

2 為什么要引入AOP?

上面是定義,引入AOP的原因肯定是可以解決目前開發中存在的某些痛點:

(1)目前的開發當中,相互之間都是模塊化開發,使用AOP可以有效的實現模塊化的思路。

(2)將輔助邏輯(日志、安全、監控等)從業務主體邏輯中進行剝離,同步進行開發。

AOP是一種思想,這種思想是把一些業務邏輯剝離開,然后按照主業務邏輯進行組合,最后達到想要的功能邏輯。

3 如何簡單的實現AOP?

3.1 AOP編程思路

本圖是一個簡單的思路。

明確需求創建切面類定義切點定義通知思考:要在哪個方法的什么時候做什么事(方法前?方法后?還是around ?)即選擇哪個連接點進行執行通知在切點附近(before?after?) 做什么操作

下面定義一個日志的簡單案例,實現AOP。使用的是原始的注解方式:

3.2 案例實現AOP

3.2.1 明確需求

在某個方法上加上@FddLog,就會在執行這個方法的前后,自動輸出相應的信息。下面以把大象放進冰箱為例子進行演示:

3.2.2 基本接口和實現

  1. public interface ElephentToRe{ 
  2.   public void toRe(); 

實現類如下:

  1. public class ElephentToReImpl implements ElephentToRe{ 
  2.   public void toRe() { 
  3.     System.out.println("把大象放冰箱"); 
  4.   } 

3.2.3 定義切面和通知

  1. public class ElephentToReHelper{ 
  2.     public void beforeElephentToRe(){ 
  3.         System.out.println("把冰箱門打開"); 
  4.     } 
  5.     public void afterElephentToRe(){ 
  6.         System.out.println("把冰箱門關上"); 
  7.     } 

配置就好了

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
  4.   xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  6.   http://www.springframework.org/schema/aop 
  7.   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> 
  8.   <!-- 定義通知內容,也就是切入點執行前后需要做的事情 --> 
  9.   <bean id="elephentToReHelper" class="com.fdd.bean.ElephentToReHelper"></bean> 
  10.   <!-- 定義被代理者 --> 
  11.   <bean id="elephentToReImpl" class="com.fdd.bean.ElephentToReImpl"></bean> 
  12.   <aop:config> 
  13.     <aop:aspect ref="elephentToReHelper"
  14.       <aop:before method="beforeElephentToRe" pointcut="execution(* *.toRe(..))" /> 
  15.       <aop:after method="afterElephentToRe" pointcut="execution(* *.toRe(..))" /> 
  16.     </aop:aspect> 
  17.   </aop:config> 
  18. </beans> 

3.2.4 測試看效果

  1. public class Test { 
  2.   public static void main(String[] args){ 
  3.     @SuppressWarnings("resource"
  4.     ApplicationContext appCtx = new FileSystemXmlApplicationContext("application.xml"); 
  5.     ElephentToRe elephentToReImpl = (ElephentToRe)appCtx.getBean("elephentToReImpl"); 
  6.     elephentToReImpl.toRe(); 
  7.   } 

上面的這種方法是通過純粹的POJO切面來完成的。實現方式也比較簡單。

4 我對AOP思想的看法

任何新技術的出現都是為了解決目前開發中存在的某些痛點。對于aop來說,其主要是把一些功能代碼進行抽象封裝,和主業務邏輯代碼進行剝離。在需要的地方進行織入即可。

我的看法是

(1)在平時開發代碼的時候,完全可以把一些常見的,常用的功能代碼進行封裝,盡量做到動態配置。不同的功能模塊只需要進行織入即可。

(2)定義業務邏輯的模板,比如說如果要解決某一個業務功能,如果頁面類似,可以按照基本的框架進行組合,然后使用配置平臺進行可控化配置即可。

本文轉載自微信公眾號「愚公要移山」,可以通過以下二維碼關注。轉載本文請聯系愚公要移山公眾號。

 

責任編輯:武曉燕 來源: 愚公要移山
相關推薦

2021-05-07 21:32:51

SpringIOC分析

2022-06-07 07:58:45

SpringSpring AOP

2024-11-04 16:29:19

2009-06-19 13:28:30

Spring AOPSpring 2.0

2012-08-22 10:18:03

PHP

2011-05-18 09:47:39

spring

2022-06-08 08:04:28

Springservicerepository

2011-09-15 10:15:30

Spring

2024-02-23 10:33:34

SpringBean容器

2019-05-10 10:50:04

Spring AOPJDK動態代理CGLIB動態代理

2022-02-16 13:46:40

Spring Aop代碼注解

2021-03-30 08:49:27

測試Spring AOP

2014-10-22 09:33:10

2024-03-04 11:10:01

2022-02-20 07:28:13

Spring注解用法

2022-02-17 13:39:09

AOP接口方式

2009-06-18 14:45:55

Spring Fram

2022-03-25 00:00:00

Splunk搜索SPL

2009-06-22 10:41:34

Spring.AOP

2023-01-28 08:04:08

AOPSpring框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久高清| 国产精品高清在线 | 91成人午夜性a一级毛片 | 亚洲九九精品 | 羞羞视频在线网站观看 | 成人福利在线观看 | 欧美1—12sexvideos | 国产一区久久 | 成人精品毛片国产亚洲av十九禁 | 这里只有精品99re | 日韩波多野结衣 | 欧美极品一区二区 | 在线视频99 | 美女国产一区 | 视频一区二区在线观看 | 99视频免费在线 | 亚洲日本一区二区三区四区 | 久久久久久网站 | 在线中文一区 | 日本三级电影在线看 | 日日做夜夜爽毛片麻豆 | 国产乱码精品一区二区三区五月婷 | 欧美成人久久 | 欧美一级片在线 | 亚州精品天堂中文字幕 | 日韩中文一区 | 色花av| 天天影视亚洲综合网 | 97中文视频| 午夜在线视频 | h视频在线免费看 | 亚洲精品久久久久久久久久吃药 | 精品乱子伦一区二区三区 | 91免费入口| 国产一区二区电影 | 精品国产乱码久久久久久丨区2区 | 欧美日韩亚洲在线 | 国产一区二区免费电影 | 免费亚洲成人 | 日韩一区二区在线视频 | 国产精品一区三区 |