Spring @Autowired 和 @Resource 注解的区别

注:代号01含义 : 字段类型或者方法的第一个参数类型,代号02含义 : 字段名称或者方法的第一个参数名称
@Autowired
1,默认按照01匹配。
2,当有多个类型匹配的对象时,如果不用@qualifier(name="name")指定名称,则异常。
3,默认必须找到匹配对象,否则异常;如果允许找不到匹配对象,则需要设置@Autowired(required=false)。

@resource
1,如果指定了@resource的名称( @resource(name="name") ),则按照@resource的name进行匹配,如果没有找到匹配的对象,则异常。
2,如果没有指定@resource的名称( @resource(name="name") ),则按照02匹配。
3,如果根据上一条规则没有找到匹配的对象,则按照01匹配,在此情况下,如果有多个类型匹配的对象,则异常。
4,必须找到匹配的对象,否则异常。

大部分情况下我们的一个接口只有一个实现,都是需要按照类型进行匹配的,不需要按照名称进行匹配,所以直接使用@Autowired更合适。

你可能感兴趣的:(spring)