問題:spring中@Inject和@Autowired的區別?分別在什么條件下使用呢?
我在瀏覽SpringSource上的一些博客,在其他一個博客中,那個作者用了@Inject,但是我覺得他用@Autowired也行
下面是一部分代碼:
@Inject private CustomerOrderService customerOrderService;
我不能確定@Inject和@Autowired的區別,有人可以解釋一下他們兩個的區別和使用情景嗎?
回答一
假設這里你說的是javax.inject.Inject注解。@Inject是Java CDI(上下文以及依賴注入)的一部分,在Java EE 6 (JSR-299)被引入。Spring 已經決定了支持與它們的@Autowired 注解具有相同含義的@Inject注解的使用
所以,你這個問題的答案就是@Autowired 是Spring自家的注解。 @Inject就是一項名叫CDI的Java技術的一部分,這項技術定義了一種類似于Spring的依賴注入的標準。在一個spring的應用程序中呢,這兩個注解是作用是一樣的,因為spring已經決定除了它們自己的注解外,另外支持一些JSR-299的注解
回答二
這里有一篇博客比較了@Resource, @Inject, 和 @Autowired,已經寫得很全面了
來自于那個博客:
除了測試2和測試7,配置和輸出都是一樣的。當我查看hood的時候,我確定了‘@Autowired’ 和 ‘@Inject’這兩個注解的效果是相同的。這兩個注解都用了 AutowiredAnnotationBeanPostProcessor 去注入依賴。‘@Autowired’ 和 ‘@Inject’可以交換著使用去注入bean。但是‘@Resource’ 注解使用‘CommonAnnotationBeanPostProcessor’去注入依賴。雖然它們使用了不同的處理器類,但是它們的效果都是幾乎一樣的。下面是它們執行路徑的總結。
那個作者說的測試2和測試7 分別是 ”以字段名注入“ 和 ”一次使用錯誤限定符來解析bean的嘗試“
這里的結論已經回答了你所有的問題了
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/7142622/what-is-the-difference-between-inject-and-autowired-in-spring-framework-which