@Resource,@Autowired,@Inject 這3種都是用來註入bean的,它們屬於不同的程式中。詳情參見下表: ...
@Resource,@Autowired,@Inject 這3種都是用來註入bean的,它們屬於不同的程式中。詳情參見下表:
v區別
ANNOTATION | PACKAGE | SOURCE | 作用域 | 實現方式 | 其它 |
---|---|---|---|---|---|
@AutoWired | org.springframework.bean.factory,Spring自帶的方式 | Spring 2.5+ | 可以用在構造器、方法、屬性、參數、註解上面 | 通過AutowireAnnotationBeanPostProcessor類實現依賴註入 | 註入可以根據名字/類型,可以設置required屬性為false指定找不到相應bean時不拋異常 |
@Resource | javax.annotation,是JSR-250標準,JDK6以上自帶,Spring版本要求2.5以上 | Java JSR-250 | 可以用在方法、屬性、類上 | 通過CommonAnnotationBeanPostProcessor類實現依賴註入 | 與@AutoWired一致。但可以指定name屬性來指定beanName,但如果name對應的bean不存在,則會拋出異常,且沒有required屬性 |
@Inject | javax.inject,是JSR-303標準,Spring版本3以上。需要導入外部依賴 | Java JSR-330 | 可以用在方法、屬性、構造器上 | 通過AutowiredAnnotationBeanPostProcessor類實現依賴註入 | 與@AutoWired一致,區別在於@Inject沒有required屬性 |
v實現方式
2.1 @Inject
如下是@Inject
的使用,不加@Named
註解,需要配置與變數名一致即可。
@Inject @Named("mongo") private Mongo mongo;
2.2 @Autowired
@Autowired
有個屬性為required
,可以配置為false,如果配置為false之後,當沒有找到相應bean的時候,系統不會拋錯。
@Autowired private MongoTemplate mongoTemplate;
2.3 @Resource
@Resource
一般會指定一個name屬性,如下
@Resource(name = "testMapper") private TestMapper testMapper;
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專註於基礎平臺的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!