@AutoWired和@Resource的区别

@AutoWired和@Resource的区别

  1. 来源不同:
    1. @AutoWired是Spring提供的注解.
    2. @Resource是Java EE提供的,来源于java.annotation包,是JSR-250的一部分,所以,@Resource不是Spring特有的,它可以使用在所有遵循Java EE标准的项目中。
  2. 注入方式不同:
    1. @AutoWired默认是按照byType进行依赖注入的,也就是变量的类型,如果存在多个同样类型的Bean,Spring机会进一步使用变量名进行匹配。
    2. @Resource默认是按照byName进行依赖注入的,也就是变量名。
    3. 代码示例:
      // @Autowired示例
      public class BookService {
      
          @Autowired // 默认按照BookRepository进行注入依赖
          private BookRepository bookRepository;
      
      }
      
      // @Resource示例
      public class BookService {
      
          // 使用 @Resource 默认按照来按bookRepository(名称)注入依赖
          @Resource
          private BookRepository bookRepository;
      
      }
      

  3. 可定制性:
    1. @AutoWired可以和@Qualifier一起使用,@Qualifier允许指定注入哪一个bean。
    2. @Resource是按照name进行注入的。
    3. 代码示例:
      // @AutoWired和@Qualifier一起使用,@Qualifier指定注入哪一个bean。
      public class BookService {
      
          @Autowired // 默认按照BookRepository进行注入依赖
          @Qualifier("bookRepository")
          private BookRepository bookRepository;
      
      
      }
      

  4. 必须性
    1. @AutoWired默认是必须注入的,如果它在SpringIOC容器中找不到这个bean,就会抛出异常。但是可以通过将@AutoWired的required属性设置为false,就可以改变这个必须性。
    2. @Resource默认不是必须的,如果在IOC容器中找不到对应的Bean,会让程序继续运行,然后将该字段不会被设置,就是null。
    3. 代码示例:
         
      // 设置@AutoWired的required属性为false。
      public class BookService {
      
           @Autowired(required = false) 
          private BookRepository bookRepository;
      
      
      }
      

  5. 兼容性:
    1. @AutoWired是Spring特有的,只能在Spring相关依赖的项目中使用。
    2. @Resource使用所有遵循javaEE规范的项目中,更加通用。

在实际使用时,你应根据自己的具体需求和环境选择两者之一。如果你完全在Spring环境中工作,@Autowired是一个不错的选择,因为它能充分利用Spring容器的各项功能。如果你希望你的应用更加可移植,或者遵循Java EE标准,选择@Resource可能更合适。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值