1. 程式人生 > >Spring中@Autowired與@Resource的區別

Spring中@Autowired與@Resource的區別

一、相同點

@Autowired與@Resource都用於注入bean

兩者都可以用在setter方法或直接用在欄位上。

二、 不同點

1、所屬不同

@Autowired由Spring提供,而@Resource由J2EE提供。Spring支援幾個由JSR-250規範定義的註解,@Resource註解便是其中之一。

2、裝配順序不同

@Autowired 預設按型別(Type)注入,而@Resource預設按名稱(Name)注入: @Resource 未使用name屬性指定名稱和未使用type屬性指定型別時預設按名稱(@Resource用在欄位上時以欄位名作為名稱,用在setter方法上時以屬性名作為名稱
)注入;name、type都有指定時則在spring上下文中找到唯一匹配得bean進行裝配;單獨使用name屬性指定名稱時,則從spring上下文找到對應id的bean進行裝配,找不到會丟擲異常;單獨使用type屬性指定名稱時,則從spring上下文找到對應型別的唯一bean進行裝配,找不到或找到多個會丟擲異常。
@Autowired 預設要求該依賴物件存在,可以通過設定required屬性為false以允許物件為null;@Autowired 預設按型別查詢匹配得Bean進行裝配,如果該型別存在多個物件則自動再按名稱,如果還找不到或有多個則會丟擲異常;也可以配合使用@Qualifier來指明哪個實現類的名稱。

    @Autowired(required=false)@Qualifier("userService") 
    private UserService userService;