概況
@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")使用。
推薦去我的博客閱讀更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
覺得不錯,別忘了點贊+轉發哦!