@autowired註解注入為null_Spring中@Autowired註解和@Resource註解區別
阿新 • • 發佈:2020-12-17
技術標籤:@autowired註解注入為null@resource註解autowired注入為nullautowired註解spring 註解spring註解
Spring不但支援自己的@Autowired註解,還支援幾個由JSR-250規範定義的註解(如@Resource)。
相同點@Autowired註解和@Resource註解均可以標註在欄位上或者屬性的setter方法上(下面的其中一種即可)。
不同點 ● @Autowired註解預設按照型別(byType)注入。預設情況下,必須要求依賴物件必須存在,如果允許為null,則需要設定它的required屬性為false。如果我們想按照名稱注入,則可以結合@Qualifier註解一起使用。@Resource註解預設按照名稱(byName)注入,同時也提通過型別注入,名稱可以通過name屬性進行指定。 ● 在Spring bean生命週期過程中,@Autowired註解通過後置處理器 AutowiredAnnotationBeanPostProcessor 解析;@Resource註解通過後置處理器 CommonAnnontationBeanPostProcessor@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;}
-
如果同時指定了name和type,則從Spring上下文中找到唯一的bean進行裝配,找不到則丟擲異常。
如果指定了name,則從Spring上下文查詢名稱(id)匹配的bean進行裝配,找不到則丟擲異常。
如果指定了type,則從Spring上下文找到型別匹配的唯一bean進行裝配,找不到或者找到多個都會丟擲異常。
如果既沒有指定name也沒有指定type,則自動安裝byName進行裝配;如果沒有匹配則回退為一個原始型別進行匹配,如果匹配則自動裝配。
推薦使用@Resource註解在欄位上,這樣就不用寫setter方法,並且這個註解是屬於J2EE的,減少了與Spring耦合,程式碼比較優雅。
END
掃碼關注我們
獲得更多
精彩資訊