1. 程式人生 > 其它 >@autowired註解注入為null_Spring中@Autowired註解和@Resource註解區別

@autowired註解注入為null_Spring中@Autowired註解和@Resource註解區別

技術標籤:@autowired註解注入為null@resource註解autowired注入為nullautowired註解spring 註解spring註解

8cc0a485fdc612e7a0acdec11028af32.png

Spring不但支援自己的@Autowired註解,還支援幾個由JSR-250規範定義的註解(如@Resource)。

cc317aaecf7d24b007c2da215254e177.png

相同點

@Autowired註解和@Resource註解均可以標註在欄位上或者屬性的setter方法上(下面的其中一種即可)。

@Autowiredprivate UserService userService;@Resourceprivate OrderService orderService;private ProductService productService;private ConsignmentService consignmentService;@Autowiredpublic void setProductService(ProductService productService){      this.productService = productService;}@Resource(name="congsignmentService")public void setConsignmentService(ConsignmentService consignmentService){      this.consignmentService= consignmentService;}
不同點 ● @Autowired註解預設按照型別(byType)注入。預設情況下,必須要求依賴物件必須存在,如果允許為null,則需要設定它的required屬性為false。如果我們想按照名稱注入,則可以結合@Qualifier註解一起使用。@Resource註解預設按照名稱(byName)注入,同時也提通過型別注入,名稱可以通過name屬性進行指定。 ● 在Spring bean生命週期過程中,@Autowired註解通過後置處理器 AutowiredAnnotationBeanPostProcessor 解析;@Resource註解通過後置處理器 CommonAnnontationBeanPostProcessor
解析。 @Resource註解裝配順序
    1. 如果同時指定了name和type,則從Spring上下文中找到唯一的bean進行裝配,找不到則丟擲異常。

    2. 如果指定了name,則從Spring上下文查詢名稱(id)匹配的bean進行裝配,找不到則丟擲異常。

    3. 如果指定了type,則從Spring上下文找到型別匹配的唯一bean進行裝配,找不到或者找到多個都會丟擲異常。

    4. 如果既沒有指定name也沒有指定type,則自動安裝byName進行裝配;如果沒有匹配則回退為一個原始型別進行匹配,如果匹配則自動裝配。

推薦使用@Resource註解在欄位上,這樣就不用寫setter方法,並且這個註解是屬於J2EE的,減少了與Spring耦合,程式碼比較優雅。

1d5aff65e9054503fc8d3315f8541b79.png

END

6b3781ea7c38fc76d53f998bd28808df.png

掃碼關注我們

獲得更多

精彩資訊