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


概況

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

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")使用。

推薦去我的博客閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架構、阿里巴巴等大廠最新面試題

覺得不錯,別忘了點贊+轉發哦!


免責聲明!

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



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