@Resource和@Autowired的区别
@Autowired
需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。 使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。
@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。
public class Person {
//如果显示定义了Autowired的required属性为fa1se,说明这个对象可以为null,否则不允许为空
@Autowired(required = false)
@Qualifier(value = "cat")
private Cat cat;
@Autowired
private Dog dog;
private String name;
}
@Resource
Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称匹配 Bean,也可以按类型匹配 Bean。默认是按名称注入。使用该注解,要求 JDK 必须是 6 及以上版本。@Resource 可在属性上,也可在 set 方法上。
@Resource 注解若不带任何参数,采用默认按名称的方式注入,按名称不能注入 bean,则会按照类型进行 Bean 的匹配注入。
@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配的 Bean 的 id
public class Person {
@Resource(name = "cat")
private Cat cat;
@Resource
private Dog dog;
private String name;
}
@Resource和@Autowired的区别
-
都是用来自动装配的。都可以放在属性字段上
-
@Autowired通过byType的方式实现,而且必须要求这个对象存在!【常用】
-
@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!【常用】
-
执行顺序不同:@Autowired 通过byType的方式实现,@Resource默认通过byname的方式实现