Spring5之動態AOP使用案例

2021-10-05 11:06:22 字數 2930 閱讀 3168

在實際工作中,此bean可能是滿足業務需要的核心邏輯,例如test方法可能會封裝著某個核心業務。但是,如果完美想在test前後加入日誌來跟蹤除錯。如果直接修改原始碼並不符合物件導向的設計方法,而且隨著改動原有**也有一定的風險,還好接下來的spring幫我們做到了這一點。

package com.test.spring5code.bean;

import lombok.extern.slf4j.slf4j;

import org.springframework.stereotype.component;

/** * @description: mytestbean

* @author: janson

* @date: 2020/4/25 12:26

**/@slf4j

@component

public

class

mytestbean

public

void

setteststr

(string teststr)

public

void

test()

}

spring中摒棄了最原始的繁雜配置方式而採用@aspect註解對pojo進行標註,使aop的工作大大簡化,例如在myaspectj類中,我們要做的就是在所有類的test方法執行前在控制台列印beforetest,而在所有類的test方法執行後列印aftertest,同時又使用環繞的方式在所有類的方法執行前後再次分別列印before1和after1。

package com.test.spring5code.aspect;

import lombok.extern.slf4j.slf4j;

import org.aspectj.lang.proceedingjoinpoint;

import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.component;

/** * @description: aspect test

* @author: janson

* @date: 2020/4/20 22:13

**/@aspect

@slf4j

@component

public

class

myaspectj

@before

("test()"

)public

void

beforetest()

@after

("test()"

)public

void

after()

@around

("test()"

)public object aroundtest

(proceedingjoinpoint proceedingjoinpoint)

catch

(throwable throwable)

log.

info

("after1");

return o;

}}

package com.test.spring5code.config;

import org.springframework.context.annotation.componentscan;

import org.springframework.context.annotation.configuration;

/** * @description: 配置類

* @author: janson

* @date: 2020/4/25 11:37

**/@configuration

@componentscan

(basepackages =

"com.test.spring5code"

)public

class

beansconfig

package com.test.spring5code;

import com.test.spring5code.bean.mytestbean;

import com.test.spring5code.config.beansconfig;

/** * @description: myaspectj test

* @author: janson

* @date: 2020/4/20 22:46

**/public

class

myaspectjtest

}

可以看到在我們輸出test前後分別列印出我們之前定義的日誌內容,實現了在方法前後列印日誌。

15:39

:42.566

[main] info com.test.spring5code.aspect.myaspectj - before115:

39:46.379

[main] info com.test.spring5code.aspect.myaspectj - beforetest15:

39:46.443

[main] info com.test.spring5code.bean.mytestbean - test15:

40:20.782

[main] info com.test.spring5code.aspect.myaspectj - after115:

40:32.049

[main] info com.test.spring5code.aspect.myaspectj - aftertest

如果您覺得有幫助,歡迎點讚哦 ~ ~ 多謝~ ~

Spring5原始碼分析之Spring

因為本人打算仿照spring寫個小型spring tinyspring,所以要閱讀spring原始碼,在閱讀原始碼過程中的發現就記錄於此,如果有什麼錯誤,歡迎指出,我會及時更正。dispatcherservlet繼承了httpservlet並把doget,dopost等一系列方法在內部都呼叫dopr...

Spring5快樂教程(九)AOP基本知識

定義 面向切面 方面 程式設計,利用aop可以對業務邏輯的各個部分進行隔離,從而使得其之間耦合度降低,提高程式可重用性,同時提高了開發效率。通俗描述 不修改源 方式,在主幹功能裡新增新的功能。aop的底層原理使用的是動態 兩種情況 無介面的情況 使用cglib動態 三個引數第1步 建立介面,定義方法...

Spring5常用註解

用於建立物件的註解 component 用於建立物件,相當於xml檔案中配置的乙個bean 屬性只有乙個value,用來指定id,預設是當前類的類名,首字母小寫。下面三個註解是 component的衍生註解,作用和屬性相同,只不過提供了更加詳細的語義化。controller 一般用於表現層的註解 s...