@Autowire和@resource的区别

说明:

   @Autowired 和 @Resource 都是 Spring 框架中的注解,用于实现依赖注入(Dependency Injection,DI)。

区别:

  1. 来源不同:@Autowired 来自 Spring IoC 容器,而 @Resource 来自于 Java 。@Autowired 通常从构造器方法中的参数获取依赖,而 @Resource 则是从另一个类中注入。
  2. 依赖查找顺序不同:@Autowired 是先按类型(byType)查找,如果存在多个 Bean,再按名称(byName)进行查找;而 @Resource 是先按名称(byName)查找,如果存在多个 Bean,再按类型(byType)进行查找。
  3. 支持的参数不同:@Autowired 支持参数为 null,而 @Resource 不支持。@Autowired 可以接受多个参数,用于指定多个需要注入的对象;而 @Resource 只能接受单个参数,用于指定需要注入的特定属性或方法。
  4. @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
  5. 方法作用不同:@Autowired 用于自动装配 Bean,而 @Resource 用于将一个类的属性或方法注入到另一个类中。

注意@Autowire@Qualifier配合使用效果也是和@Resource一样。


@Autowired(required = false) @Qualifier("commonExecutorPool")
private ExecutorService commonExecutorPool;

@Resource(name = "commonExecutorPool")
private ExecutorService commonExecutorPool;

@resource注解通常用于以下场景:

  1. 定义一个 Spring Bean,该 Bean 依赖于其他 Bean。
  2. 通过注解配置 Bean,避免编写冗长的字符串或使用大括号等占位符。
  3. 当需要在多个组件之间共享数据源时,可以使用 @Resource 注解指定共享资源。
  4. 当需要注入一个可序列化的对象(如文件、数据库连接等)时,可以使用 @Resource 注解将其注入到方法或属性上,实现依赖的自动注入。
  5. 当需要自定义一个可复用的组件时,可以使用 @Resource 注解定义一个共享的静态资源。

总结:  

   @Autowired 主要用于自动装配 Bean,而 @Resource 主要用于将一个类的属性或方法注入到另一个类中,实现依赖注入。总之,@Resource  注解可以帮助我们简化 Bean 依赖、注入数据源等操作,提高开发效率和代码质量。同时,在使用过程中,也需要根据具体情况选择合适的使用场景和方式,以发挥其最大的价值。

猜你喜欢

转载自blog.csdn.net/weixin_50002038/article/details/130446882