1.@Autowired注解通常用于自动装配依赖关系,但被注入的依赖必须是Spring容器中管理的Bean。
2.按类型自动装配这是和@Resource(按名称)注解的本质区别
public interface Animal {
void eat();
}
@Component
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog is eating");
}
}
@Component
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("Cat is eating");
}
}
@Component
public class AnimalService {
@Autowired
private Animal animal;
public void feedAnimal() {
animal.eat();
}
}
在上面的例子中,AnimalService类中使用@Autowired注解自动装配Animal类型的依赖对象。由于容器中存在两个实现Animal接口的bean(Dog和Cat),Spring会抛出异常,因为无法确定要注入哪个bean。
@Component("dog")
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog is eating");
}
}
@Component("cat")
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("Cat is eating");
}
}
@Component
public class AnimalService {
@Resource(name = "cat")
private Animal animal;
public void feedAnimal() {
animal.eat();
}
}
在上面的例子中,AnimalService类中使用@Resource注解根据名称自动装配名为"cat"的bean实例。因此,Spring会自动注入Cat实例作为Animal类型的依赖对象