Autowired 和 Resource 的区别Autowired和Resource都是 Java 开发中用于实现依赖注入DI的常用注解但它们在来源、装配规则和使用方式上有着本质的区别。为了让你更直观地理解以下是两者的核心区别对比区别维度AutowiredResource注解来源Spring 框架特有Java 官方标准JSR-250默认装配规则默认按类型byType注入默认按名称byName注入指定名称方式需配合Qualifier(beanName)使用直接使用name属性如Resource(namebeanName)是否支持可选注入支持requiredfalse找不到 Bean 时不报错不支持找不到 Bean 时会直接抛出异常支持的注入位置字段、Setter 方法、构造器字段、Setter 方法不支持构造器 核心差异深度解析1. 来源与兼容性Autowired是 Spring 框架的亲儿子与 Spring 生态结合最紧密。Resource是 Java 官方提供的标准注解属于 JSR-250 规范。它不依赖于 Spring因此在跨框架如 Jakarta EE或需要降低与 Spring 耦合度的场景下兼容性更好。2. 查找与注入逻辑最核心的区别Autowired先类型后名称Spring 容器会先根据字段或参数的类型去查找 Bean。如果找到唯一的一个直接注入如果找到多个同类型的 Bean它会再根据字段名称去匹配如果依然匹配不上就必须配合Qualifier明确指定 Bean 的名称否则会报错。Resource先名称后类型它会先根据名称默认是字段名也可以通过name属性指定去查找 Bean。如果按名称找不到它才会降级去按类型查找。3. 实际开发中的使用建议优先推荐使用Autowired在纯粹的 Spring / Spring Boot 项目中Autowired是最主流的选择。特别是配合构造器注入Spring 4.3 后单构造器可省略该注解能够更好地保证依赖的不可变性且非常便于单元测试。特定场景使用Resource当你需要严格按名称注入或者项目中有多个同类型的 Bean 且不想引入Qualifier时直接使用Resource(name xxx)会显得更加简洁直观。⚠️ 最佳实践提醒在同一个项目中建议保持依赖注入注解风格的统一尽量避免Autowired和Resource混用以保证代码的规范性和可维护性。要不要我出几道小练习题帮你巩固一下这两个注解在实际代码中的使用区别