@Autowired注解
在Spring框架中, @Autowired 注解用于自动装配Bean的依赖关系。通过在字段、构造函数、Setter方法或普通方法上添加 @Autowired 注解,Spring容器会自动识别并注入相应的Bean,无需手动指定依赖关系。
@Component
public class UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void process() {
userDao.save();
}
}
@Autowired 注解标记了 setUserDao 方法,告诉Spring容器在实例化 UserService 时自动注入 UserDao 的实例。
另外, @Autowired 注解还可以直接标记在字段上
,构造函数上
或普通方法上
,实现不同形式的依赖注入。
@Component
public class UserService {
@Autowired
private UserDao userDao;
public void process() {
userDao.save();
}
}
使用 @Autowired 注解进行依赖注入时,Spring容器会根据类型进行匹配。如果存在多个匹配的Bean,可以结合 @Qualifier 注解指定具体的Bean名称进行注入。
java
public interface Animal {
void makeSound();
}
@Component("dog")
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Dog: Woof Woof");
}
}
@Component("cat")
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Cat: Meow Meow");
}
}
@Component
public class AnimalService {
private Animal animal;
@Autowired
public void setAnimal(@Qualifier("dog") Animal animal) {
this.animal = animal;
}
public void playSound() {
animal.makeSound();
}
}
@Resource注解
@Resource 和 @Autowired 注解都可以用于依赖注入,但它们有一些区别。主要区别在于 @Resource 是Java EE提供的注解,而 @Autowired 是Spring框架提供的注解。
-
@Resource 注解是Java EE的一部分,可以用来标记依赖关系,它默认
按照名称
进行注入,如果指定了name属性,则按照指定的名称
进行注入。而 @Autowired 注解是Spring框架的注解,按照类型
进行注入。 -
@Resource 注解是在Java EE 5规范中引入的,而 @Autowired 注解是Spring 2.5版本引入的。
@Component
public class UserService {
@Resource
private UserDao userDao;
public void process() {
userDao.save();
}
}
@Autowired 注解标记了 userDao 字段, @Qualifier(“userDao”) 指定了要注入的Bean名称为"userDao",这样就实现了和 @Resource 注解一样的效果。
@Component
public class UserService {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
public void process() {
userDao.save();
}
}