Spring自動裝配@Autowired教程
今天來跟大家聊聊簡單聊聊@Autowired,Autowired翻譯過來為自動裝配,也就是自動給Bean對象的屬性賦值。
@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的定義,重點看 @Target,我們發(fā)現(xiàn)@Autowired可以寫在:
- ElementType.CONSTRUCTOR:表示可以寫在構(gòu)造方法上
- ElementType.METHOD:表示可以寫在普通方法上
- ElementType.PARAMETER:表示可以寫在方法參數(shù)前
- ElementType.FIELD:表示可以寫在屬性上
- ElementType.ANNOTATION_TYPE:表示可以寫在其他注解上
寫在構(gòu)造方法上
對于@Autowired寫在構(gòu)造方法上的情況,跟Spring選擇構(gòu)造方法的邏輯有關(guān),一個類中是不是有多個構(gòu)造方法,是不是加了@Autowired注解,是不是有默認(rèn)構(gòu)造方法,跟構(gòu)造方法參數(shù)類型和個數(shù)都有關(guān)系,后面單獨來介紹。
寫在普通方法上
對于@Autowired寫在普通方法上的情況,我們通常寫的setter方法其實就是一個普通的setter方法,那非setter方法上加@Autowired會有作用嗎?
比如:
@Component public class UserService { @Autowired public void test(OrderService orderService) { System.out.println(orderService); } }
這個test方法會被Spring自動調(diào)用到,并且能打印出OrderService對應(yīng)的Bean對象。
寫在方法參數(shù)前
把@Autowired寫在參數(shù)前沒有多大意義,只在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
寫在屬性上
這種情況不用多說了,值得注意的是,默認(rèn)情況下,因為@Autowired中的required屬性為true,表示強(qiáng)制依賴,如果更加某個屬性找不到所依賴的Bean是不會賦null值的,而是會報錯,如果把required屬性設(shè)置為false,則會賦null值。
寫在其他注解上
比如我們可以自定義要給注解:
@Autowired @Retention(RetentionPolicy.RUNTIME) public @interface HoellerAutowired { }
@HoellerAutowired和@Autowired是等價的,能用@Autowired的地方都可以用@HoellerAutowired代替。
到此這篇關(guān)于Spring自動裝配@Autowired教程的文章就介紹到這了,更多相關(guān)Spring @Autowired內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Spring + Spring MVC + Mybatis 高性能web構(gòu)建實例詳解
這篇文章主要介紹了基于Spring + Spring MVC + Mybatis 高性能web構(gòu)建實例詳解,需要的朋友可以參考下2017-04-04將Java程序與數(shù)據(jù)庫進(jìn)行連接的操作方法
這篇文章主要介紹了將Java程序與數(shù)據(jù)庫進(jìn)行連接的操作方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系
這篇文章主要介紹了詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系,本文先對兩種方法作了介紹,然后對二者聯(lián)系進(jìn)行分析,具有一定參考價值,需要的朋友可以了解下。2017-09-09Java并發(fā)編程中的CompletableFuture使用詳解
這篇文章主要介紹了Java并發(fā)編程中的CompletableFuture使用詳解,Future接口定義了操作異步任務(wù)執(zhí)行的一些方法,如獲取異步任務(wù)執(zhí)行的結(jié)果、取消任務(wù)的執(zhí)行、判斷任務(wù)是否被取消,判斷任務(wù)是否執(zhí)行完畢等,需要的朋友可以參考下2023-12-12Java實現(xiàn)FTP文件的上傳和下載功能的實例代碼
FTP 是File Transfer Protocol(文件傳輸協(xié)議)的英文簡稱,而中文簡稱為“文傳協(xié)議”。接下來通過本文給大家實例講解Java實現(xiàn)FTP文件的上傳和下載功能,需要的的朋友一起看看吧2016-11-11