@Autowired 和 @Resource 都是 Spring 中用于依赖注入的注解,但它们有一些不同点:
@Autowired 是 Spring 提供的注解,而 @Resource 是 JavaEE 标准中定义的注解,但 Spring 也支持它。
@Autowired 默认按照 byType 方式进行自动装配,如果有多个 Bean 类型匹配时,会按照属性名进行注入;@Resource 默认按照 byName 方式进行自动装配,如果指定了 name 属性,则根据名称进行注入,如果没有指定,则根据属性名进行注入。
@Autowired 可以注入任何类型的 Bean,包括自定义类型、Spring 容器中的 Bean、第三方库的类等;@Resource 只能注入 JavaEE 标准中定义的资源,如:DataSource、WebService 等。
默认情况下,@Autowired 注解标注的属性必须存在匹配的 Bean,否则会抛出异常。如果将 required 属性设置为 false,则表示该属性是可选的,如果找不到匹配的 Bean,则将其设置为 null;@Resource 没有这个属性,如果找不到匹配的 Bean,则会抛出异常。
@Autowired 可以注入到构造函数、Setter 方法、属性上,而 @Resource 只能注入到属性上。
@Autowired 在 Spring 2.5 版本之后支持多种作用域,包括 Singleton、Prototype、Request、Session、Global Session 和 Application 等;@Resource 不支持多种作用域,只能在 Singleton 作用域下使用。
在实际使用中,一般优先选择 @Autowired 注解,因为它更加灵活,可以注入任意类型的 Bean。如果需要注入 JavaEE 标准中定义的资源,则可以使用 @Resource 注解。
作者:lfsun666
链接:https://juejin.cn/post/7204285137046175804
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。