在實際工作中,此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...