1. 程式人生 > >Spring AOP學習筆記(1):AOP基礎知識

Spring AOP學習筆記(1):AOP基礎知識

一、 使用AOP前的經驗

在接觸AOP這種程式設計思想之前,我也有好多的編碼經歷,將業務邏輯和日誌、測試和驗證等其他需求放在一起的,這簡直是痛苦死了,每寫一個方法都得重複好多程式碼,而且這些程式碼有好多是類似的,但是不得不重寫,因為當時還是菜鳥(現在也是菜鳥安靜),比如之前同組的師兄開發了一個小工具,由於我是剛進組,便把測試的工作交給我了,我傻傻的寫了類似下面的這段程式碼:
/*...*/
int a = System.currentTimeMillis();
/* function */
int b = System.currentTimeMillis();
/*...*/
int time = b - a;
以及後來做其他工作時,比如說日誌,在程式執行開始和結束後反映程式執行的狀態,都和上面做的功能類似。知道後來接觸到Spring之後才知道AOP這種的東西,但是要說明的是Spring和AOP之間並沒有必然聯絡,只是Spring支援AOP而已,開始的時候看網上大家談AOP必說Spring,所以我按照我的想法說明一下。

二、 AOP之我的理解

之前初次看到AOP,什麼面向切面程式設計,太學術化了,還有那些術語,什麼連線點、橫切面,整的我暈頭轉向,一點都不明白,後來在網上看到一張圖片,稍微有點明白了。
其中的麵條就是我們的主要的業務邏輯,其他的各種調料就是其他的繁瑣的小功能,其中意味大家都能體會得到。這種面向切面在我理解類似於漢堡,在肉的外面夾了很多其他的東西,但是我們主要的目的是吃肉(對於我來說啦),但是你不能把外面的麵包和蔬菜全都絞碎放到肉裡面,每一個種類的食物都可以看成一種瑣碎的功能,比如麵包是驗證、番茄醬是測試、薯條是日誌等等。
重要術語解釋(以下均是自己的理解):
  • 通知(Advice):還是看英文吧,中文我不知道怎麼翻譯過來的,簡單來說就是你希望在業務邏輯上加什麼東西,需要增強的功能,可以類比於Java中InputStream和BufferedInputStream之間的關係,那個buffered類似於Advice;
  • 目標(Target):被Advice的物件,可以同上類比為InputStream,即被包裝的功能,如果拿漢堡比較,就是那塊肉;
  • 切點(Pointcut):切點一開始怎麼也理解不明白,這到底是個什麼玩意,後來才弄明白,這可以看成Advice怎麼做到通知Target,是通過一種條件,這種條件就是切點,還可以類比,正則表示式匹配字串,正則表示式就類似於切點,用來找到對應的字串;
  • 代理(Proxy):在Target被Advice後會生成一個新的物件,生成的物件類似於BufferedInputStream這種,即將業務邏輯和增強的功能融合到一起之後生成的新的物件,這是通過Java中的動態代理技術實現的;
  • 連線點(Joinpoint):我老是把連線點和目標弄混,這次我試著把他們解釋明白,連線點說白了就是目標和通知的結合部,比如Advice在Target前,在Target後,或者在Target出問題時,包括兩個東西:一個是連線的位置,說明Advice在哪裡和Target連線;另一個就是程式執行點,我的理解,也就是連線後Target要執行的方法或者相應的程式碼段;
  • 切面(Aspect):可以說這是一個模組,我的理解是,它包括Advice和切點,它們被封裝在一起形成一個模組,與業務邏輯是獨立的,即形象的說,在漢堡中一類蔬菜就是一個切面,它可以放在漢堡中,也可以放在三明治中,切面就是這類蔬菜,當然如果你想,可以把這類蔬菜放在任何位置。

三、 AOP實現

  • 動態代理手動實現:由於AOP這種思想是通過Java反射的動態代理來實現的,但是每次都是自己手動實現太累了,也沒必要,關鍵是我們懶了;
  • AspectJ:應該是Java中最受歡迎的AOP框架;AspectJ官方網站
  • 其他:還有些其他的框架,我本人不太瞭解,身邊的人也沒有在用的,比如:AspectJWerkz、Jboss AOP、Spring AOP等。

相關推薦

Spring AOP學習筆記1AOP基礎知識

一、 使用AOP前的經驗 在接觸AOP這種程式設計思想之前,我也有好多的編碼經歷,將業務邏輯和日誌、測試和驗證等其他需求放在一起的,這簡直是痛苦死了,每寫一個方法都得重複好多程式碼,而且這些程式碼有好多是類似的,但是不得不重寫,因為當時還是菜鳥(現在也是菜鳥),比如之前同組

linux學習筆記1linux基礎知識

1.linux是什麼? Linux這個詞本身只表示Linux核心,但實際上人們已經習慣了用Linux來形容整個基於Linux核心,並且使用GNU 工程各種工具和資料庫的作業系統。 2. 什麼是shell 保護系統核心並對外提供操作介面的軟體 在linux中預設的

Spring 事務學習筆記1事務的基本知識

一、事務&&JDBC事務支援 在我的之前的spring操作資料庫中的文章很少提及事務,不是說它不重要,而是太重要,以至於spring專門有一部分來說明這一內容。之前可以說對事務幾乎沒有考慮過,只是知道把要進行的操作被事務包裹起來,就像在hibernate中進

Shader學習筆記1Shader基礎

最近想學Shader,找到一個大佬的部落格,該筆記只是自己學習Shader的知識記錄,其實跟部落格的內容差不多,但是寫一遍,自己對shader的基礎更加清楚,這將是一個系列筆記,大佬部落格的地址: 1.unity提供的5種Shader模板 (1)Standard

朱老師ARM裸機學習筆記計算機基礎知識

RISC和CISC的區別 CISC(complex instruction-set computer)複雜指令集 特點: 指令較多,較豐富,CISC的CPU 較難設計,Intel是典型的CISC體系CPU。 RISC(reduce instruction

Spring AOP學習筆記基礎概念

AOP產生背景 AOP(Aspect Oriented Programming),即面向切面程式設計,可以說是OOP(Object Oriented Programming,面向物件程式設計)的補充和完善。OOP引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的一個集合。不

【尚矽谷】spring學習筆記1HelloWorld

1、安裝SPRING TOOL SUITE 這個 Eclipse 外掛。2、搭建spring開發環境,引入jar包。3、建立spring專案3.1、建立一個HelloWorld類public class HelloWorld { private String name;

Java框架spring Boot學習筆記Spring相關概念

擴展 靜態 輕量級 想要 spring配置 核心 使用 oot 調用方法 Spring是開源、輕量級、一站式框架。 Spring核心主要兩部分 aop:面向切面編程,擴展功能不是修改源代碼實現 ioc:控制反轉,比如一個類,在類裏面有方法(不是靜態的方法),想要調用類

SpringBoot學習筆記1配置Mybatis

target oca run class .com gpo connect auto users SpringBoot學習筆記(1):配置Mybatis 參考資料:   1.AndyLizh的博客   2.xiaolyuh123的博客 快速開始 添加Mybatis依賴(

Redis學習筆記1Redis的說明與安裝

sets cti ansi c sde pos AR bsd 學習 ash Redis學習筆記(1):Redis說明的安裝 說明 什麽是Redis REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-v

Node.js學習筆記1Node.js快速開始

path 文本文 下載 啟動程序 直接 查看 學習筆記 完成後 編輯器 Node.js學習筆記(1):Node.js快速開始 Node.js的安裝 下載 官方網址:https://nodejs.org/en/ 說明:   在Windows上安裝時務必選擇全部組件,包括勾選

Spring入門學習筆記1

eth cast path jpa 組件 註解 lob 調用bean 應用 目錄 Spring好處 依賴註入 面向面編程(AOP) Spring Framework Core Container Web Miscellaneous 編寫第一個程序 IoC容器 Sprin

tensorflow學習筆記1sess.run()

原址:https://www.2cto.com/kf/201610/559887.html session.run() session.run([fetch1, fetch2]) import tensorflow as tf state = tf.Variable(0.0,dtype=

開源容器openshift學習筆記1新增Router元件

開篇之前如果沒有安裝openshift環境可以參考我的博文:centos7下安裝openshift 本系列部落格學習筆記參考《開源容器雲openshift》一書:下載連線:https://download.csdn.net/download/u012371097/10745382  

Spring MVC 學習筆記@RequestMapping用法詳解

一、@RequestMapping 簡介 在Spring MVC 中使用 @RequestMapping 來對映請求,也就是通過它來指定控制器可以處理哪些URL請求,相當於Servlet中在web.xml中配置 <servlet>  

JavaWeb---Spring學習筆記1

1. 什麼是spring,它能夠做什麼? Spring是一個開源框架,它由Rod Johnson建立。它是為了解決企業應用開發的複雜性而建立的。 Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。 然而,Spring的用途不僅限於伺服器端

Stuts2學習筆記1環境搭建及Demo

原始碼: github: https://github.com/liaotuo/Struts2-Demo/tree/master/struts2-demo 環境搭建 下載struts2 官網下載:http://mirror.bit.edu.cn/apache/struts

H264學習筆記1視訊壓縮編碼的基本原理

        陸陸續續學習H264有一段時間了,曾經以為自己可以在這方面大有作為,但是越是學習越發現,根本不存在能夠大幅度提升H264效能的方案,對於我這種水平的人來講。初次學習,概念的理解仍然很困難。在這裡我只是簡單淺顯的講一講我最近的讀書學習感想。        首先

Python學習筆記1圖片處理

基礎學習 在配置完開發環境之後,就可以開始Python的學習之路啦!首先是基礎知識的學習,可以根據自己的情況找到合適的教程,我用了一週的時間把慕課網上的Python教程 過了一遍。 過完一遍之後,發現印象不夠深刻,所以找一些小的練習來鞏固基礎。我選擇了Pyt

spring boot 學習筆記 1 Spring Boot 介紹

Spring Boot 是一套全新的框架,它來自於 Spring 大家族,因此 Spring 所有具備的功能它都有並且更容易使用;同時還簡化了基於 Spring 的應用開發,通過少量的程式碼就能建立一個獨立的、產品級別的 Spring 應用。 Spring Boot 特性 使用