Autowired和Resource都是spring项目中常用的注解,负责进行依赖注入(将依赖的对象注入到当前对象中)。
区别体现
1.来源不同
Resource来自Java的JDK注解
Autowired来自Spring定义的注解
2.依赖查找顺序不同
项目启动时对象交给Spring ioc容器来管理,再查找对象将对象注入引用到当前类中;这个查找过程分为两种实现:按名称查找(byName)、按类型查找(byType);这两个注解都支持这两种查找方式,但查找的顺序相反;
Resource:先根据名称查找,如果找不到再根据类型查找
Autowired:先根据类型查找,如果存在多个Bean再根据名称查找
3.支持参数不同
Resource:常用参数有name和type
@Resource(name = "userinfo", type = UserInfo.class)
private UserInfo user;
Autowired:只支持一个参数required(默认为true,要求依赖对象必须存在,如果允许为null,则设置成false)
4.依赖注入的方式不同
Resource:支持属性注入和setter方法注入
Autowired:支持属性注入、setter方法注入和构造方法注入
属性注入
@RestController
public class UserController {
// 属性注入
@Autowired
private UserService userService;
@RequestMapping("/add")
public UserInfo add(String username, String password) {
return userService.add(username, password);
}
}
构造方法注入
@RestController
public class UserController {
// 构造方法注入
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping("/add")
public UserInfo add(String username, String password) {
return userService.add(username, password);
}
}
setter方法注入
@RestController
public class UserController {
// Setter 注入
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/add")
public UserInfo add(String username, String password) {
return userService.add(username, password);
}
}