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:表示可以寫在構造方法上
- ElementType.METHOD:表示可以寫在普通方法上
- ElementType.PARAMETER:表示可以寫在方法參數(shù)前
- ElementType.FIELD:表示可以寫在屬性上
- ElementType.ANNOTATION_TYPE:表示可以寫在其他注解上
寫在構造方法上
對于@Autowired寫在構造方法上的情況,跟Spring選擇構造方法的邏輯有關,一個類中是不是有多個構造方法,是不是加了@Autowired注解,是不是有默認構造方法,跟構造方法參數(shù)類型和個數(shù)都有關系,后面單獨來介紹。
寫在普通方法上
對于@Autowired寫在普通方法上的情況,我們通常寫的setter方法其實就是一個普通的setter方法,那非setter方法上加@Autowired會有作用嗎?
比如:
@Component
public class UserService {
@Autowired
public void test(OrderService orderService) {
System.out.println(orderService);
}
}
這個test方法會被Spring自動調用到,并且能打印出OrderService對應的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
寫在屬性上
這種情況不用多說了,值得注意的是,默認情況下,因為@Autowired中的required屬性為true,表示強制依賴,如果更加某個屬性找不到所依賴的Bean是不會賦null值的,而是會報錯,如果把required屬性設置為false,則會賦null值。
寫在其他注解上
比如我們可以自定義要給注解:
@Autowired
@Retention(RetentionPolicy.RUNTIME)
public @interface HoellerAutowired {
}
@HoellerAutowired和@Autowired是等價的,能用@Autowired的地方都可以用@HoellerAutowired代替。
以上就是Spring中@Autowired注解在不同方法的寫法示例的詳細內(nèi)容,更多關于Spring @Autowired注解的資料請關注腳本之家其它相關文章!
相關文章
Spring中BeanFactory?FactoryBean和ObjectFactory的三種的區(qū)別
關于FactoryBean?和?BeanFactory的對比文章比較多,但是對ObjectFactory的描述就比較少,今天我們對比下這三種的區(qū)別,感興趣的朋友跟隨小編一起看看吧2023-01-01
java并發(fā)編程專題(五)----詳解(JUC)ReentrantLock
這篇文章主要介紹了java(JUC)ReentrantLock的的相關資料,文中講解非常詳細,實例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07

