SpringAop攔截參數(shù)帶注解的方法
SpringAop攔截參數(shù)帶注解的方法
攔截方法中參數(shù)類型為String
且?guī)в?code>@Crypto注解的方法:execution(* *(..,@Crypto (String),..))
攔截方法中參數(shù)上帶有@Crypto
注解的方法:execution(* *(..,@Crypto (*),..))
..
:零個(gè)或者多個(gè)*
:通配符
樣例
/** * 針對(duì)帶有@Crypto注解的參數(shù)進(jìn)行加密 * @param joinPoint * @return * @throws Throwable */ @Around(value = "execution(* *(..,@Crypto (String),..))") public Object encrypt(ProceedingJoinPoint joinPoint){}
擴(kuò)展:Spring常見三種注入方式
Spring常見三種注入方式
1、field注入(字段注入)
@Controller public class FooController { @Autowired private FooService fooService; //簡(jiǎn)單的使用例子,下同 public List<Foo> listFoo() { return fooService.list(); } }
最常見的注入方式、注入方式簡(jiǎn)單明了,類中定義全局變量,可以使用@Autowired、@Resource、@Inject注解來(lái)實(shí)現(xiàn)
2、構(gòu)造器注入
@Controller public class FooController { private final FooService fooService; public FooController(FooService fooService) { this.fooService = fooService; } //使用方式上同 public List<Foo> listFoo() { return fooService.list(); } }
定義final類型變量,并定義一個(gè)帶有帶變量的構(gòu)造函數(shù),在構(gòu)造函數(shù)初始化該變量,變量不能是static類型。Spring4.x版本中推薦的注入方式。如果在需要注入的變量很多的情況下,構(gòu)造很熟會(huì)很大很影響代碼美觀,所以推薦lombok的注解@RequiredArgsConstructor,該注解作用于類上,可以給當(dāng)前生成一個(gè)構(gòu)造函數(shù),該構(gòu)造函數(shù)的參數(shù)為當(dāng)前類中被@NotNull注解修飾的變量和final類型的變量。
3、setter注入
@Controller public class FooController { private FooService fooService; @Autowired public void setFooService(FooService fooService) { this.fooService = fooService; } //使用方式上同 public List<Foo> listFoo() { return fooService.list(); } }
定義一個(gè)變量,并實(shí)現(xiàn)該變量的set方法,set方法需要加上注解@Autowired,Spring3.x剛推出的時(shí)候,推薦使用注入的就是這種。改注解的優(yōu)點(diǎn)就是可以在類使用之后重新配置或者重新注入。
構(gòu)造器注入的好處:
構(gòu)造器注入是Spring4.x版本中推薦的注入方式,Spring官方對(duì)此也有解釋,翻譯過來(lái)就是構(gòu)造器注入的方式啊,能夠保證注入的**依賴不可變**,并且確保需要的**依賴不為空**。此外,構(gòu)造器注入的依賴總是能夠在返回客戶端(組件)代碼的時(shí)候保證**完全初始化的狀態(tài)**。
1、依賴不可變:就是變量上final關(guān)鍵字的作用。
2、依賴不為空:因?yàn)槭峭ㄟ^構(gòu)造函數(shù)注入的,Spring容器在實(shí)例化的時(shí)候會(huì)調(diào)用構(gòu)造函數(shù)傳入具體值。
3、完全初始化的狀態(tài):這個(gè)可以跟上面的依賴不為空結(jié)合起來(lái),向構(gòu)造器傳參之前,要確保注入的內(nèi)容不為空,那么肯定要調(diào)用依賴組件的構(gòu)造方法完成實(shí)例化。而在Java類加載實(shí)例化的過程中,構(gòu)造方法是最后一步(之前如果有父類先初始化父類,然后自己的成員變量,最后才是構(gòu)造方法)。所以返回來(lái)的都是初始化之后的狀態(tài)。
field注入的缺點(diǎn):
1、對(duì)于IOC容器之外的環(huán)境,會(huì)報(bào)錯(cuò)NPE
FooController fooController = new FooController(); fooController.listFoo(); //NullPointerException
2、在循環(huán)依賴的場(chǎng)景下,構(gòu)造器注入在項(xiàng)目啟動(dòng)啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)、而field注入的方式啟動(dòng)時(shí)不會(huì)報(bào)錯(cuò),在使用具體的對(duì)象時(shí)才會(huì)報(bào)錯(cuò)
另外,在一個(gè)依賴的接口有多個(gè)實(shí)現(xiàn)類時(shí),推薦使用field注入或者setter注入的方式來(lái)指定注入類型。
到此這篇關(guān)于SpringAop攔截參數(shù)帶注解的方法的文章就介紹到這了,更多相關(guān)SpringAop攔截參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解
這篇文章主要介紹了RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解,簡(jiǎn)單來(lái)說,就是你必須關(guān)閉 RabbitMQ 的自動(dòng)ack ,可以通過一個(gè) api 來(lái)調(diào)用就行,然后每次你自己代碼里確保處理完的時(shí)候,再在程序里 ack 一把,需要的朋友可以參考下2023-12-12Spring整合Quartz Job以及Spring Task的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Spring整合Quartz Job以及Spring Task的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2017-12-12idea在運(yùn)行期間,實(shí)現(xiàn)讓修改的頁(yè)面實(shí)時(shí)生效
這篇文章主要介紹了idea在運(yùn)行期間,實(shí)現(xiàn)讓修改的頁(yè)面實(shí)時(shí)生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01java使用elasticsearch分組進(jìn)行聚合查詢過程解析
這篇文章主要介紹了java使用elasticsearch分組進(jìn)行聚合查詢過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02springboot攔截器過濾token,并返回結(jié)果及異常處理操作
這篇文章主要介紹了springboot攔截器過濾token,并返回結(jié)果及異常處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-09-09使用新版Maven-mvnd快速構(gòu)建項(xiàng)目
本文主要介紹了使用新版Maven-mvnd來(lái)快速構(gòu)建項(xiàng)目,相比于Maven,mvnd可以顯著提高構(gòu)建速度,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01Java實(shí)現(xiàn)猜數(shù)字小游戲代碼
大家好,本篇文章主要講的是Java實(shí)現(xiàn)猜數(shù)字小游戲代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Java中@ConditionalOnProperty注解使用
在Spring?Boot中,@ConditionalOnProperty注解是一種方便的工具,用于根據(jù)應(yīng)用程序配置文件中的屬性值來(lái)控制Bean的創(chuàng)建和加載,本文就來(lái)介紹一下Java中@ConditionalOnProperty注解使用,感興趣的可以了解一下2023-11-11使用MAT進(jìn)行JVM內(nèi)存分析實(shí)例
這篇文章主要介紹了使用MAT進(jìn)行JVM內(nèi)存分析實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04