千鋒教育-做有情懷、有良心、有品質的職業(yè)教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > @Resource注解和@Autowired注解的區(qū)別?

@Resource注解和@Autowired注解的區(qū)別?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-11 18:11:01 1697019061

一、@Resource注解和@Autowired注解的區(qū)別

@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的

@Autowird注解默認通過byType方式注入,而@Resource注解默認通過byName方式注入

@Autowired注解注入的對象需要在IOC容器中存在,否則需要加上屬性required=false,表示忽略當前要注入的bean,如果有直接注入,沒有跳過,不會報錯

對于byName和byType方式不太熟悉的可以看一下這里:Spring中的byName與byType

簡單來說,byName就是變量名去匹配bean的id屬性,而byType則是變量類型去匹配bean的class屬性

@Autowired

private UserService userService;

此處byName就是拿變量名userService去匹配IOC容器的iduserService,匹配成功;而byType就是拿變量類型UserService去匹配IOC容器的idcom.test.UserService.UserServiceImpl,因為UserServiceImpl是UserService實現(xiàn),所以也匹配成功。

延伸閱讀:

二、@Autowird注解的使用

步驟:@Autowird默認的注入方式為byType,也就是根據(jù)類型匹配,當有多個實現(xiàn)時,則通過byName注入,也可以通過配合@Qualifier注解來顯式指定name值,指明要使用哪個具體的實現(xiàn)類

舉例:

首先有一個接口UserService和兩個實現(xiàn)類UserServiceImpl1和UserServiceImpl2,并且這兩個實現(xiàn)類已經(jīng)加入到Spring的IOC容器中了

@Service

public class UserServiceImpl1 implements UserService

@Service

public class UserServiceImpl2 implements UserService

1通過@Autowired注入使用

@Autowired

private UserService userService;

根據(jù)上面的步驟,可以很容易判斷出,直接這么使用是會報錯的

原因:首先通過byType注入,判斷UserService類型有兩個實現(xiàn),無法確定具體是哪一個,于是通過byName方式,這里的變量名userService也無法匹配IOC容器中id(此處指的userServiceImpl1和userServiceImpl2),于是報錯。

注意:通過注解注入到IOC容器的id值默認是其類名首字母小寫

聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉載。
10年以上業(yè)內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT