SpringBoot中使用AOP
前提:
安裝jdk1.8,maven,idea。
1、使用idea建立一個maven專案。
2、在pom檔案中新增依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies> <dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
spring-boot-starter-web是建立一個web專案必須的依賴。
spring-boot-devtools是實現熱部署必須新增的依賴。
spring-boot-starter-aop是使用Spring AOP功能必須新增的依賴。
使用idea時的熱部署可能會遇到問題。參考:
3、書寫程式碼。
3.1、啟動類
package cn.ancony.springboot03ex01; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
註解@SpringBootApplication表示這是一個SpingBoot應用程式。
3.2、Controller類
package cn.ancony.springboot03ex01.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @RequestMapping("/sayHello.html") public @ResponseBody String say() { return "hello,spring boot"; } @RequestMapping("/say.html") public @ResponseBody String say(String name) { return "hello, " + name; } }
註解@Controller表示這是一個Controller類,對應http請求的處理類。@RequestMapping表示請求/sayHello.html時將使用String say()
方法作為處理的方法。請求/say.html時將使用方法String say(String name)作為處理的方法。方法的引數在請求的時候通過在"html"的後面加上"?name=xxx"傳入。
此時,如果啟動應用程式,使用curl並訪問http://192.168.128.128:8080/sayHello.html時,控制檯顯示:
[[email protected] ~]$ curl 172.20.10.2:8080/sayHello.html
hello,spring boot
使用curl並訪問http://192.168.128.128:8080/say.html?name=ancony時,控制檯顯示:
[[email protected] ~]$ curl 172.20.10.2:8080/sayHello.html
hello,ancony
而Sping程式是沒有任何反應的。它只是將處理的結果直接返回給了客戶端。
3.3、Config類
package cn.ancony.springboot03ex01.conf; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.context.annotation.Configuration; import java.util.Arrays; @Configuration @Aspect public class AOPConfig { @Around("@within(org.springframework.stereotype.Controller)") public Object functionAccessCheck(final ProceedingJoinPoint pjp) throws Throwable { Object[] args = pjp.getArgs(); System.out.println("args: " + Arrays.asList(args)); Object o = pjp.proceed(); System.out.println("return: " + o); return o; } }
註解@Configuration表示這是一個配置類。註解@Aspect表示這是一個切面。註解@Around聲明瞭一個表示式,描述了要織入目標的特性。@within表示目標型別帶有註解。其註解的型別引數為org.springframework.stereotype.Controller,表示Spring Controller方法被呼叫的時候,都會執行@Around註解的方法。
Object functionAccessCheck(final ProceedingJoinPoint pjp)是用來織入的程式碼。其引數的名稱為ProceedingJoinPoint pjp,方法pjp.proceed()表示執行原來的應用程式碼。proceed方法可能會丟擲異常。
這時,通過curl訪問172.20.10.2:8080/say.html?name=ancony,控制檯顯示:
[[email protected] ~]$ curl 172.20.10.2:8080/say.html?name=ancony
hello, ancony
Spring應用程式顯示:
args: [ancony]
return: hello, ancony
表示織入的程式碼被成功地執行了。
相關推薦
Springboot中AOP統一處理請求日誌
alt image pri sys -1 boot 技術分享 ring com 完善上面的代碼: 現在把輸出信息由先前的system.out.println()方式改為由日誌輸出(日誌輸出的信息更全面) Springboot中AOP統一處理請求日誌
springboot中aop(註解切面)應用
aop的理解:我們傳統的程式設計方式是垂直化的程式設計,即A–>B–>C–>D這麼下去,一個邏輯完畢之後執行另外一段邏輯。但是AOP提供了另外一種思路,它的作用是在業務邏輯不知情(即業務邏輯不需要做任何的改動)的情況下對業務程式碼的功能進行增強,這種程式設計
SpringBoot中AOP的配置
AOP目的: 面向切面程式設計(aspect-oriented programming,AOP)主要實現的目的是針對業務處理過程中的切面進行提取,諸如日誌、事務管理和安全這樣的系統服務,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發
SpringBoot中aop的使用
步驟 編寫使用註解的被攔截類,加了這個註解的類或者方法就會被攔截 使用@Aspect宣告一個切面,並通過@Component讓此切面成為Spring容器管理的Bean 使用@After、@Befor、@Aroud定義建言(advice),可直接將攔截規則(切
SpringBoot中使用LoadTimeWeaving技術實現AOP功能
目錄 1. 關於LoadTimeWeaving 1.1 LTW與不同的切面織入時機 1.2 JDK實現LTW的原理 1.3 如何在Spring中實現LTW 2. Springboot中使用LTW實現AOP的例子 3. 參考資料 1. 關於LoadTi
Springboot中利用aop和註解實現動態資料來源
本篇文章將介紹如何使用AOP和註解來實現動態資料來源. 使用ThreadLocal儲存當前執行緒使用的資料來源的key import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**
springBoot中利用AOP切面設定全域性事務
package test.spring.config; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.springframework.aop.
SpringBoot 中的aop配置,完成日誌記錄功能
第一步:在pom.xml下新增依賴 因為springboot已經新增過日誌記錄功能的依賴 <!-- 核心模組,包括自動配置支援、日誌支援 --> <dependency> <groupId>org.s
SpringBoot中利用AOP實現攔截器效果
既然使用Spring,AOP就是不了或缺的。 嘗試好多遍,踩了很多坑,最後總算把效果弄出來了。說起來很簡單,只需要建一個類就好了。 @Aspect @Configuration public class InfoInterceptor { private stat
SpringBoot中使用AOP
前提: 安裝jdk1.8,maven,idea。1、使用idea建立一個maven專案。2、在pom檔案中新增依賴<parent> <groupId>org.springframework.boot</groupId> &l
SpringBoot中使用AOP 監控sql耗時
新增aop依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> &
SpringBoot圖文教程5—SpringBoot 中使用Aop
有天上飛的概念,就要有落地的實現 概念+程式碼實現是本文的特點,教程將涵蓋完整的圖文教程,程式碼案例 文章結尾配套自測面試題,學完技術自我測試更紮實 概念十遍不如程式碼一遍,朋友,希望你把文中所有的程式碼案例都敲一遍 大哥大姐新年好,點贊轉發不要少 SpringBoot 圖文系列教程技術大綱 鹿老
springboot-3-aop
bsp log int onf enc span work artifact param aop存在的目的是進一步解耦, spring支持aspectJ的註解式切面編程 1), [email protected]/* */, [email protec
springboot中單元測試
spring alt logs api bsp log 單元測試 1-1 單元 測試service: 測試api: springboot中單元測試
SpringBoot中使用Spring Data Jpa 實現簡單的動態查詢的兩種方法
ppr eat value table 得到 blog .net ride integer 首先謝謝大佬的簡書文章:http://www.jianshu.com/p/45ad65690e33# 這篇文章中講的是spring中使用spring data jpa,使用了xml配
SpringBoot中的常用配置
comm highlight tar -type cati pid 添加 maven項目 http請求 一 . 關於在application.properties文件中的一些常見配置 1.server.port=8888 :表示配置端口 2.server
淺談spring中AOP以及spring中AOP的註解方式
早就 好的 面向 XML ram ati alt 返回 增強 AOP(Aspect Oriented Programming):AOP的專業術語是"面向切面編程" 什麽是面向切面編程,我的理解就是:在不修改源代碼的情況下增強功能.好了,下面在講述aop註解方式的情況下順
spring中aop的註解實現方式簡單實例
xsd 說話 2017年 nco 執行 str throw tar pac 上篇中我們講到spring的xml實現,這裏我們講講使用註解如何實現aop呢。前面已經講過aop的簡單理解了,這裏就不在贅述了。 註解方式實現aop我們主要分為如下幾個步驟(自己整理的,有更好的
SpringBoot中使用log4j日誌
網址 默認 cat sources pan 目錄 space com 控制臺 一:引入jar包 使用SpringBoot創建項目的時候,pom文件引入了spring-boot-starter,其中包含了spring-boot-starter-logging,該依賴內
31. Springboot中使用RestTemplate
springboot一. 前言官網使用說明獲取Eureka實例public String serviceUrl() { InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES", false); retur