@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的方式实现

posted @ 2021-09-16 15:17  SEVEN_CCODE  阅读(49)  评论(0)    收藏  举报