回答
@Inject與@Autowire與@Resource的區別?
@Autowired: Spring注入資源(而不是@Inject和@Resource),注入一個資源的類型,即由註釋字段或承包商的接口的類。如果我們很少實現一個接口或子類,我們可以使用@Qualifier註釋縮小選擇範圍,以避免模糊。對於回退匹配,bean名稱被視爲默認限定符值。儘管您可以使用此慣例通過名稱引用特定的bean,但@Autowired基本上是可選的語義限定符的類型驅動注入。
@Inject:註釋基於JSR-330(Java依賴注入)標識可注射的構造方法,方法和字段。這個註解是Spring的@Autowired註解的一個幾乎完整的替代品。因此,您可以選擇使用@Inject,而不是使用特定於Spring的@Autowired註釋。 @Autowired和@Inject之間的差異之一是@Inject沒有必需的字段,所以如果我們找不到合適的對象來注入它將會失敗,而@Autowired可以使用required = false並允許空字段(僅限於如果需要!)。 @Inject註解的好處是,不要直接注入引用,你可以讓@Inject注入一個Provider。提供者接口除其他外,還可以延遲注入bean引用和注入bean的多個實例。 如果我們很少實現一個接口或子類,我們可以使用@Named註釋縮小選擇範圍,以避免模糊。 @Named註釋的作用非常類似於Spring的@Qualifier
@Resource:基於JSR-250的註釋。 @Resource與@Autowired和@Inject非常相似,但主要區別在於找到要注入的bean所需的執行路徑。 @Resource將首先按名稱縮小搜索範圍,然後按類型縮小搜索範圍,最後縮小搜索範圍(如果按名稱找到匹配則忽略)。 @Autowired和@Inject將首先按類型劃分搜索範圍,然後按限定符劃分搜索範圍,最後按名稱縮小搜索範圍。
你能說一些關於建議什麼?最佳實踐? –
我很樂意迴應您的評論,但我更願意保留此答案。你會發佈一個新問題嗎? –
在最後一行中,你提到@Autowired也按名稱搜索,因爲我知道它沒有名稱選項,是嗎? –
除了@Haim回答there is good description Spring和JSR-330(依賴注入Java)註釋之間的區別以及如何使用Spring的最後一個。
|------------|---------------|---------------|---------------|-----------------------|
| | Setter/Field | Constructor | Applicable to | Matching order |
| | injection | injection | type | |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource | X | | X | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
- 1. Demistifying EJB註釋和注入
- 2. CDI注入和@Model註釋
- 3. 註釋注入和XML注入
- 4. 註釋和自動空格
- 5. ResourceFilterFactory和非路徑註釋資源
- 6. 自動註釋新行註釋
- 7. mapkit和註釋
- 8. ByteBuddy和註釋
- 9. 彈簧注射和註釋
- 10. SQL注入和多行註釋
- 11. 的JavaEE:@Resource註釋未注入JNDI資源
- 12. 如何注入依賴於數據源與EJB3和註釋
- 13. 將注入值注入到註釋中?
- 14. @Model註釋和MVC
- 15. EasyMock和@Value註釋
- 16. 常量和註釋
- 17. 3D註釋和PdfLayer
- 18. Hibernate註釋和DTOs
- 19. 鈦 - Mapview和註釋
- 20. robotium和android註釋
- 21. JAX-WS和註釋
- 22. JPA註釋和ConstraintViolationException
- 23. Katharsis和JPA註釋
- 24. 枚舉和註釋
- 25. Scala和@Inject註釋
- 26. Android註釋和MonkeyTalk?
- 27. ThreadLocal和@Aspect註釋
- 28. liquibase和hibernate註釋
- 29. PoEdit和PHP註釋
- 30. 標準註釋自定義注入
http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-standard-annotations,http://docs.spring.io /spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-resource-annotation –
[@Resource vs @Autowired]的可能重複(http://stackoverflow.com/questions/4093504/resource -vs-autowired) –
我發現的例子很好的解釋是[這裏](http://blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/) – marioosh