@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;