在spring的使用中,控制反转(IOC),依赖注入(DI)被频繁的使用着。实现自动注入最常用的两个注解@Autowired、 @Resource它们的不同点又在哪里呢?我们通过不同的场景对于它们使用过程中的不同意义了解后再进行原理上的理解。
首先看一个网上简单的例子:
1. 一个简单的Human接口
public interface Human {
public void speak();
public void walk();
}
2.两个Human的实现类 ManImpl, WomanImpl
public class ManImpl implements Human {
@Override
public void speak() {
System.out.println(" man speaking ");
}
@Override
public void walk() {
System.out.println(" man walking ");
}
}
public class WomanImpl implements Human {
@Override
public void speak() {
System.out.println("woman speaking");
}
@Override
public void walk() {
System.out.println("woman walking");
}
}
- 一个主调方法
@Service
public class SequenceServiceImpl{
@Resource
private Human human;
}
启动项目后产生报错信息:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.dotwin.client.api.Human] is defined: expected single matching bean but found 2: manImpl,womanImpl
org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:172)
org.springframework