1. 程式人生 > >SpringBoot中使用AOP

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時的熱部署可能會遇到問題。參考:

https://blog.csdn.net/ancony_/article/details/81040983

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

表示織入的程式碼被成功地執行了。

相關推薦

SpringbootAOP統一處理請求日誌

alt image pri sys -1 boot 技術分享 ring com 完善上面的代碼: 現在把輸出信息由先前的system.out.println()方式改為由日誌輸出(日誌輸出的信息更全面) Springboot中AOP統一處理請求日誌

springbootaop(註解切面)應用

aop的理解:我們傳統的程式設計方式是垂直化的程式設計,即A–>B–>C–>D這麼下去,一個邏輯完畢之後執行另外一段邏輯。但是AOP提供了另外一種思路,它的作用是在業務邏輯不知情(即業務邏輯不需要做任何的改動)的情況下對業務程式碼的功能進行增強,這種程式設計

SpringBootAOP的配置

AOP目的: 面向切面程式設計(aspect-oriented programming,AOP)主要實現的目的是針對業務處理過程中的切面進行提取,諸如日誌、事務管理和安全這樣的系統服務,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發

SpringBootaop的使用

步驟 編寫使用註解的被攔截類,加了這個註解的類或者方法就會被攔截 使用@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

淺談springAOP以及springAOP的註解方式

早就 好的 面向 XML ram ati alt 返回 增強   AOP(Aspect Oriented Programming):AOP的專業術語是"面向切面編程" 什麽是面向切面編程,我的理解就是:在不修改源代碼的情況下增強功能.好了,下面在講述aop註解方式的情況下順

springaop的註解實現方式簡單實例

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