Springboot JavaEE @Resource 注解解释
@Resource
是 Java EE(也称为 Jakarta EE)中的注解,但也可以用于 Spring 框架中来实现依赖注入。它主要用于标识依赖对象,并将该对象注入到类的字段、方法或构造函数中。
与 @Autowired
的区别
在 Spring 中,@Resource
和 @Autowired
都可以用来实现依赖注入,但它们有以下区别:
@Resource
来自 Java EE:@Resource
注解源自 Java EE 规范(javax.annotation.Resource
),它遵循 Java 的标准,兼容多个依赖注入框架。- 它使用 by name 的方式进行注入。即优先按名称(通过字段名或属性名)查找 Bean 进行注入,如果找不到与名称匹配的 Bean,再根据类型查找。
@Autowired
来自 Spring:@Autowired
是 Spring 框架特有的注解,默认使用 by type 的方式进行注入,按类型匹配所需的依赖对象。- 如果需要按名称注入,可以配合
@Qualifier
注解使用。
@Resource
的使用
@Resource
注解可以应用在字段、setter 方法、或构造函数上。它可以接受两个属性:
name
:用于指定注入的 Bean 的名称。type
:用于指定注入的 Bean 的类型。
示例
- 按名称注入(默认方式):
import javax.annotation.Resource; |
在上面的例子中,Spring 将根据字段名 myRepository
去 Spring 容器中查找同名的 Bean,并注入它。
- 使用
name
属性指定注入的 Bean 名称:
import javax.annotation.Resource; |
在此示例中,@Resource(name = "customRepository")
明确指定了要注入的 Bean 的名称为 customRepository
,Spring 会根据这个名称来注入相应的 Bean。
- 使用
type
属性按类型注入:
import javax.annotation.Resource; |
这里使用 type
属性,明确按类型 MyRepository
进行注入,Spring 会根据类型匹配相应的 Bean。
@Resource
的工作流程
- 按名称匹配:
@Resource
首先根据属性名查找与之匹配的 Bean。 - 按类型匹配:如果没有找到与名称匹配的 Bean,
@Resource
则根据类型进行查找。 - 注入:如果找到匹配的 Bean,则注入该 Bean;如果找不到,且没有设置
required = false
,则会抛出异常。
何时使用 @Resource
- 兼容性:如果你希望你的代码能够在 Spring 和 Java EE 之间保持较好的兼容性,
@Resource
是一个更标准的选择。 - 按名称注入:如果你需要通过名称来指定依赖,
@Resource
可能会更加方便,因为它默认按名称注入,而不需要像@Autowired
那样配合@Qualifier
使用。
总结
@Resource
是 Java EE 的注解,用于依赖注入,Spring 也支持该注解。- 默认按名称注入,如果没有找到名称匹配的 Bean,才按类型注入。
- 适用场景:当你需要按名称注入或者希望代码兼容 Java EE 标准时,可以使用
@Resource
。
如果你还有其他问题或需要更多示例,随时告诉我!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦甜怪圈 Xiaomai Circle!