一、@Resource注解和@Autowired注解的區(qū)別
@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的
@Autowird注解默認(rèn)通過(guò)byType方式注入,而@Resource注解默認(rèn)通過(guò)byName方式注入
@Autowired注解注入的對(duì)象需要在IOC容器中存在,否則需要加上屬性required=false,表示忽略當(dāng)前要注入的bean,如果有直接注入,沒(méi)有跳過(guò),不會(huì)報(bào)錯(cuò)
對(duì)于byName和byType方式不太熟悉的可以看一下這里:Spring中的byName與byType
簡(jiǎn)單來(lái)說(shuō),byName就是變量名去匹配bean的id屬性,而byType則是變量類型去匹配bean的class屬性
@Autowired
private UserService userService;
此處byName就是拿變量名userService去匹配IOC容器的iduserService,匹配成功;而byType就是拿變量類型UserService去匹配IOC容器的idcom.test.UserService.UserServiceImpl,因?yàn)閁serServiceImpl是UserService實(shí)現(xiàn),所以也匹配成功。
延伸閱讀:
二、@Autowird注解的使用
步驟:@Autowird默認(rèn)的注入方式為byType,也就是根據(jù)類型匹配,當(dāng)有多個(gè)實(shí)現(xiàn)時(shí),則通過(guò)byName注入,也可以通過(guò)配合@Qualifier注解來(lái)顯式指定name值,指明要使用哪個(gè)具體的實(shí)現(xiàn)類
舉例:
首先有一個(gè)接口UserService和兩個(gè)實(shí)現(xiàn)類UserServiceImpl1和UserServiceImpl2,并且這兩個(gè)實(shí)現(xiàn)類已經(jīng)加入到Spring的IOC容器中了
@Service
public class UserServiceImpl1 implements UserService
@Service
public class UserServiceImpl2 implements UserService
1通過(guò)@Autowired注入使用
@Autowired
private UserService userService;
根據(jù)上面的步驟,可以很容易判斷出,直接這么使用是會(huì)報(bào)錯(cuò)的
原因:首先通過(guò)byType注入,判斷UserService類型有兩個(gè)實(shí)現(xiàn),無(wú)法確定具體是哪一個(gè),于是通過(guò)byName方式,這里的變量名userService也無(wú)法匹配IOC容器中id(此處指的userServiceImpl1和userServiceImpl2),于是報(bào)錯(cuò)。
注意:通過(guò)注解注入到IOC容器的id值默認(rèn)是其類名首字母小寫