@Inject和@Autowired以及@Resource區(qū)別?

1、@Inject

? ? javax.inject

? ?JSR330 (Dependency Injection for Java)

? ?這是jsr330中的規(guī)范,通過‘AutowiredAnnotationBeanPostProcessor’ 類實(shí)現(xiàn)的依賴注入。

1.1、@Inject使用

? ?如下是@Inject的使用,不加@Named注解,需要配置與變量名一致即可。

? ? @Inject

? ? @Named("mongo")

? ? ?private Mongo mongo;

?2、@Autowired

? ?org.springframework.bean.factory

? Spring

? @Autowired是Spring提供的注解,通過‘AutowiredAnnotationBeanPostProcessor’ 類實(shí)現(xiàn)的依賴注入,與@inject二者具有可互換性。

2.1 @Autowired的使用

? ? @Autowired有個(gè)屬性為required,可以配置為false,如果配置為false之后,當(dāng)沒有找到相應(yīng)bean的時(shí)候,系統(tǒng)不會(huì)拋錯(cuò)。

? ? @Autowired

? ? private MongoTemplate mongoTemplate;

?3、@Resource

? ?javax.annotation

? JSR250 (Common Annotations for Java)

? ?這是jsr250規(guī)范的實(shí)現(xiàn),‘@Resource’通過 ‘CommonAnnotationBeanPostProcessor’ 類實(shí)現(xiàn)依賴注入。

3.1@Resource的使用

? ?@Resource一般會(huì)指定一個(gè)name屬性,如下:

? ? @Resource(name = "userMapper")

? ? private UserMapper userMapper;

?4、三個(gè)注解的相異之處

? @Autowired和@Inject基本是一樣的,因?yàn)閮烧叨际鞘褂肁utowiredAnnotationBeanPostProcessor來處理依賴注入。但是@Resource是個(gè)例外,? 它使用的是CommonAnnotationBeanPostProcessor來處理依賴注入。當(dāng)然,兩者都是BeanPostProcessor。

? @Autowired和@Inject

?默認(rèn) autowired by type

?可以 通過@Qualifier 顯式指定 autowired by qualifier name。

@Resource

默認(rèn) autowired by field name

如果 autowired by field name失敗,會(huì)退化為 autowired by type

可以 通過@Qualifier 顯式指定 autowired by qualifier name

如果 autowired by qualifier name失敗,會(huì)退化為 autowired by field name。但是這時(shí)候如果 autowired by field name失敗,就不會(huì)再退化為autowired by type了。

?5、總結(jié)

個(gè)人在使用上,更偏重使用@Inject,這是jsr330規(guī)范的實(shí)現(xiàn),而@Autowired是spring的實(shí)現(xiàn),如果不用spring一般用不上這個(gè),而@Resource則是jsr250的實(shí)現(xiàn),這是多年前的規(guī)范。


歡迎關(guān)注微信公眾號(hào):Java的學(xué)習(xí)之路

里面資料非常全,從java初級(jí)到高級(jí)都有,視頻,電子書,面試寶典,簡(jiǎn)歷模板,經(jīng)典案例,源碼分析程序員故事以及解決bug方法。。。。應(yīng)有盡有,可以推薦大家一起學(xué)習(xí)下??!

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容