Spring中@Autowired注解在不同方法的寫(xiě)法示例
正文
今天來(lái)跟大家聊聊簡(jiǎn)單聊聊@Autowired,Autowired翻譯過(guò)來(lái)為自動(dòng)裝配,也就是自動(dòng)給Bean對(duì)象的屬性賦值。
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Autowired { /** * Declares whether the annotated dependency is required. * <p>Defaults to {@code true}. */ boolean required() default true; }
以上是@Autowired的定義,重點(diǎn)看 @Target,我們發(fā)現(xiàn)@Autowired可以寫(xiě)在:
- ElementType.CONSTRUCTOR:表示可以寫(xiě)在構(gòu)造方法上
- ElementType.METHOD:表示可以寫(xiě)在普通方法上
- ElementType.PARAMETER:表示可以寫(xiě)在方法參數(shù)前
- ElementType.FIELD:表示可以寫(xiě)在屬性上
- ElementType.ANNOTATION_TYPE:表示可以寫(xiě)在其他注解上
寫(xiě)在構(gòu)造方法上
對(duì)于@Autowired寫(xiě)在構(gòu)造方法上的情況,跟Spring選擇構(gòu)造方法的邏輯有關(guān),一個(gè)類(lèi)中是不是有多個(gè)構(gòu)造方法,是不是加了@Autowired注解,是不是有默認(rèn)構(gòu)造方法,跟構(gòu)造方法參數(shù)類(lèi)型和個(gè)數(shù)都有關(guān)系,后面單獨(dú)來(lái)介紹。
寫(xiě)在普通方法上
對(duì)于@Autowired寫(xiě)在普通方法上的情況,我們通常寫(xiě)的setter方法其實(shí)就是一個(gè)普通的setter方法,那非setter方法上加@Autowired會(huì)有作用嗎?
比如:
@Component public class UserService { @Autowired public void test(OrderService orderService) { System.out.println(orderService); } }
這個(gè)test方法會(huì)被Spring自動(dòng)調(diào)用到,并且能打印出OrderService對(duì)應(yīng)的Bean對(duì)象。
寫(xiě)在方法參數(shù)前
把@Autowired寫(xiě)在參數(shù)前沒(méi)有多大意義,只在spring-test中有去處理這種情況,源碼注釋原文:
Although @Autowired can technically be declared on individual method or constructor parameters since Spring Framework 5.0, most parts of the framework ignore such declarations. The only part of the core Spring Framework that actively supports autowired parameters is the JUnit Jupiter support in the spring-test module
寫(xiě)在屬性上
這種情況不用多說(shuō)了,值得注意的是,默認(rèn)情況下,因?yàn)锧Autowired中的required屬性為true,表示強(qiáng)制依賴(lài),如果更加某個(gè)屬性找不到所依賴(lài)的Bean是不會(huì)賦null值的,而是會(huì)報(bào)錯(cuò),如果把required屬性設(shè)置為false,則會(huì)賦null值。
寫(xiě)在其他注解上
比如我們可以自定義要給注解:
@Autowired @Retention(RetentionPolicy.RUNTIME) public @interface HoellerAutowired { }
@HoellerAutowired和@Autowired是等價(jià)的,能用@Autowired的地方都可以用@HoellerAutowired代替。
以上就是Spring中@Autowired注解在不同方法的寫(xiě)法示例的詳細(xì)內(nèi)容,更多關(guān)于Spring @Autowired注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Android系統(tǒng)中使用WebViewClient處理跳轉(zhuǎn)URL的方法
這篇文章主要介紹了在Android系統(tǒng)中使用WebViewClient處理跳轉(zhuǎn)URL的方法,實(shí)現(xiàn)代碼為Java語(yǔ)言編寫(xiě),是需要的朋友可以參考下2015-07-07IDEA未配置SQL方言:無(wú)法使用SQL提示解決方法
在使用IDEA進(jìn)行SQL開(kāi)發(fā)時(shí),如果未配置SQL方言可能會(huì)導(dǎo)致一些問(wèn)題,如無(wú)法正確識(shí)別數(shù)據(jù)庫(kù)中的關(guān)鍵字、數(shù)據(jù)類(lèi)型等,這篇文章主要給大家介紹了關(guān)于IDEA未配置SQL方言,無(wú)法使用SQL提示解決方法的相關(guān)資料,需要的朋友可以參考下2024-07-07Java向List集合中批量添加元素的實(shí)現(xiàn)方法
這篇文章主要介紹了Java向List集合中批量添加元素的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05springboot docker jenkins 自動(dòng)化部署并上傳鏡像的步驟詳解
這篇文章主要介紹了springboot docker jenkins 自動(dòng)化部署并上傳鏡像的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05利用Spring boot如何創(chuàng)建簡(jiǎn)單的web交互應(yīng)用
這篇文章主要介紹了利用Spring boot如何創(chuàng)建簡(jiǎn)單的web交互應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04SpringBoot中使用websocket出現(xiàn)404的解決方法
在Springboot中使用websocket時(shí),本地開(kāi)發(fā)環(huán)境可以正常運(yùn)行,但部署到服務(wù)器環(huán)境出現(xiàn)404問(wèn)題,所以本文小編講給大家詳細(xì)介紹一下SpringBoot中使用websocket出現(xiàn)404的解決方法,需要的朋友可以參考下2023-09-09java實(shí)現(xiàn)多線程交替打印兩個(gè)數(shù)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多線程交替打印兩個(gè)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11深度解析Java中volatile的內(nèi)存語(yǔ)義實(shí)現(xiàn)以及運(yùn)用場(chǎng)景
這篇文章主要介紹了Java中volatile的內(nèi)存語(yǔ)義實(shí)現(xiàn)以及運(yùn)用場(chǎng)景,通過(guò)JVM的機(jī)制來(lái)分析volatile關(guān)鍵字在線程編程中的作用,需要的朋友可以參考下2015-12-12詳解java中finalize的實(shí)現(xiàn)與相應(yīng)的執(zhí)行過(guò)程
在常規(guī)的java書(shū)籍中,即會(huì)描述 object的finalize方法是用于一些特殊的對(duì)象在回收之前再做一些掃尾的工作,但是并沒(méi)有說(shuō)明此是如何實(shí)現(xiàn)的.本篇從java的角度(不涉及jvm以及c++),有需要的朋友們可以參考借鑒。2016-09-09