@Resource,@Autowired,@Inject3種注入方式


概況

 

@Resource,@Autowired,@Inject 這3種都是用來注入bean的,它們屬於不同的程序中。

 

ANNOTATION PACKAGE SOURCE
@Resource javax.annotation Java JSR-250
@Inject javax.inject Java JSR-330
@Autowired org.springframework.bean.factory Spring 2.5+

 

JSR是Java Specification Requests的縮寫,意思是Java 規范提案。是指向JCP(Java Community Process)提出新增一個標准化技術規范的正式請求。任何人都可以提交JSR,以向Java平台增添新的API和服務。JSR已成為Java界的一個重要標准。

 

區別

 

@Resource

 

它有兩個關鍵的屬性:name-名稱,type-類型

 

1、如果指定了name,type,則從Spring容器中找一個名稱和類型相當應的一個bean,找不到則報錯。

2、如果只指定了name,則從Spring容器中找一個名稱和name一樣的bean,找不到則報錯。

3、如果只指定了type,則從Spring容器中找一個類型和type一樣的bean,找不到或者找到多個則報錯。

4、如果沒有指定參數,則默認找字段名稱裝配,找不到則按類型裝配,找不到則報錯。

 

@Autowired

 

默認按類型裝配,找不到或者找到多個則報錯。

 

如果要按名稱裝配,需要結合Spring另外一個注解Qualifier("name")使用。

 

默認必須裝配requred=true,如果可以為空,可以設置為false,在Spring4+結合jdk8+的情況下還可以使用Optional和false同等的效果,如

 

@Autowired

private Optional<UserService> userService;

 

 

@Inject

 

和@Autowired類似,可以完全代替@Autowired,但這個沒有required屬性,要求bean必須存在。

 

如果要按名稱裝配,需要結合javax另外一個注解N("name")使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM