Spring中@Autowired与@Resource的区别

一、相同点

@Autowired与@Resource都用于注入bean

两者都可以用在setter方法或直接用在字段上。

二、 不同点

1、所属不同

@Autowired由Spring提供,而@Resource由J2EE提供。Spring支持几个由JSR-250规范定义的注解,@Resource注解便是其中之一。

2、装配顺序不同

@Autowired 默认按类型(Type)注入,而@Resource默认按名称(Name)注入:

@Resource 未使用name属性指定名称和未使用type属性指定类型时默认按名称(@Resource用在字段上时以字段名作为名称,用在setter方法上时以属性名作为名称)注入;name、type都有指定时则在spring上下文中找到唯一匹配得bean进行装配;单独使用name属性指定名称时,则从spring上下文找到对应id的bean进行装配,找不到会抛出异常;单独使用type属性指定名称时,则从spring上下文找到对应类型的唯一bean进行装配,找不到或找到多个会抛出异常。

@Autowired 默认要求该依赖对象存在,可以通过设置required属性为false以允许对象为null;@Autowired 默认按类型查找匹配得Bean进行装配,如果该类型存在多个对象则自动再按名称,如果还找不到或有多个则会抛出异常;也可以配合使用@Qualifier来指明哪个实现类的名称。

    @Autowired(required=false)@Qualifier("userService") 
    private UserService userService;


你可能感兴趣的:(Java框架)