@Resource和@Autowired的区别

  1. 所属框架
    @Autowired是Spring提供的注解,需要导入org.springframework.beans.factory.annotation.Autowired;
    @Resource是有JZEE提供的,需导入包javax.annotation.Resource
  1. 依赖查找方式
    @Autowired默认采用 类型(byType) 进行依赖查找。若存在多个相同类型的 bean,就需要结合@Qualifier注解来明确指定 bean 的名称。
    @Resource:默认依据 名称(byName) 来查找依赖。若找不到对应的 bean,才会按照类型进行查找。可以通过name属性直接指定 bean 的名称。

  2. 属性设置
    @Autowired:具备required属性,该属性为布尔值,用于设定依赖是否必需,默认值是true。
    @Resource:拥有更多属性,像name、type、lookup等,可对依赖查找行为进行更细致的控制。

  3. 支持的注入类型
    @Autowired:能够应用于构造函数、字段、setter 方法以及配置方法。
    @Resource:主要适用于字段和 setter 方法。

  4. 处理多个同类型 bean 的情况
    @Autowired:当存在多个相同类型的 bean 时,会抛出NoUniqueBeanDefinitionException异常,此时必须搭配@Qualifier使用。
    @Resource:通过name属性直接指定要注入的 bean 名称,可避免类型冲突问题。

  5. 建议
    使用@Resource可以提高代码的兼容性,特别是在需要与Java EE环境交互时。
    @Autowired如果找不到匹配的Bean,会抛出一个异常,除非它使用了optional=true参数。
    @Resource如果找不到匹配的资源,不会抛出异常,而是将变量设置为null

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容