@Resurce和@Autowired的區別
@Component、@Repository、@Service和 @Controller等標註的默認Bean名稱會是小寫開頭的非限定類名
@Resource 默認按名稱裝配,當找不到名稱匹配的bean再按類型裝配.
@Resource(name="beanName")指定了name屬性,按名稱注入但沒找到bean, 就不會再按類型裝配了.
@Autowired 默認按類型匹配,自動裝配(Srping提供的)
@Autowired(required=true) 一定要找到匹配的Bean,否則拋異常。 默認值就是true
@Autowired
@Qualifier("bean的名字")
按名稱裝配Bean,與@Autowired組合使用,解決按類型匹配找到多個Bean問題。
在使用@Autowired注入的時候根據定義bean的方式不同有三種情況
:
@Service
@Primary
public class QualifyPrimaryServiceImpl1 implements QualifyPrimaryService {
@Override
public void eat() {
System.out.println("我是1");
}
}
@Service
@Qualifier("aaa")
//或者@Service("aaa")
public class QualifyPrimaryServiceImpl2 implements QualifyPrimaryService {
@Override
public void eat() {
System.out.println("我是2");
}
}
@Service
public class QualifyPrimaryServiceImpl3 implements QualifyPrimaryService {
@Override
public void eat() {
System.out.println("我是3");
}
}
有三個實現類繼承了同一個接口,下面三種注入方式,分別注入三個實現類
/*qualifyPrimaryService1 優先注入@Primary的類*/
@Autowired
private QualifyPrimaryService qualifyPrimaryService;
/*qualifyPrimaryService2 指定@Qualifier("aaa")的類*/
@Autowired
@Qualifier("aaa")
private QualifyPrimaryService qualifyPrimaryService;
/*qualifyPrimaryService3*/
@Autowired
@Qualifier("qualifyPrimaryServiceImpl3")
private QualifyPrimaryService qualifyPrimaryService;