@resource和@autowire的区别 在spring boot 那个更好用
时间: 2023-03-31 10:04:26 浏览: 181
@resource 和 @autowire 都是用来注入依赖的注解,但是它们有一些不同之处。@resource 是由 JavaEE 提供的注解,它可以通过名称或者类型来注入依赖,但是它不能处理多个同类型的依赖。而 @autowire 是由 Spring 提供的注解,它可以处理多个同类型的依赖,并且可以通过名称、类型、以及 Qualifier 来注入依赖。因此,在 Spring Boot 中,@autowire 更加常用和方便。
相关问题
springboot中的@autowire和resource的区别
在Spring Boot中,@Autowired和@Resource都可以用来进行依赖注入,但是它们之间存在一些区别。
1. 来源不同:
@Autowired是Spring框架的注解,而@Resource是JavaEE的注解。
2. 注入方式不同:
@Autowired默认按照byType进行装配,如果需要按照byName进行装配,可以使用@Qualifier注解指定Bean的名称;而@Resource默认按照byName进行装配,如果需要按照byType进行装配,则可以使用@Resource(type=xxx.class)。
3. 可以注入的对象类型不同:
@Autowired可以注入任何Spring管理的Bean,包括自定义的Bean、第三方库的Bean、框架内部的Bean等;而@Resource只能注入JavaEE容器中的Bean,包括自定义的Bean和JavaEE自带的Bean,例如DataSource、SessionContext等。
4. 都支持可选属性:
@Autowired和@Resource都支持可选属性,即required属性。如果把@Autowired(required=false)或@Resource(required=false),则表示该属性为可选属性,如果找不到对应的Bean,将不会抛出异常。
总的来说,@Autowired更为灵活,可以注入更多的Bean,而@Resource更为规范,仅注入JavaEE容器中的Bean,因此需要根据实际情况来选择使用哪种注解。
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zogod.dasy.service.DasymesQltyMpCertfInfoModService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
这个错误通常是由于 Spring 容器中没有找到对应的 bean 导致的。在你的代码中,Spring 容器中没有一个类型为 `DasymesQltyMpCertfInfoModService` 的 bean 可以进行自动装配。
要解决这个问题,你可以检查以下几个方面:
1. 确保 `DasymesQltyMpCertfInfoModService` 类上使用了 `@Service` 或 `@Component` 注解,以便 Spring 容器能够自动扫描并创建该类的实例。
2. 确保 `DasymesQltyMpCertfInfoModService` 类所在的包已经被 Spring 容器扫描到,可以在 Spring Boot 应用程序的入口类上使用 `@ComponentScan` 注解来指定需要扫描的包。
3. 确保 `DasymesQltyMpCertfInfoModService` 类所依赖的其他 bean 也已经正确地配置和注入到 Spring 容器中。
4. 确保 `DasymesQltyMpCertfInfoModService` 类没有使用错误的注解或注解参数,比如使用了错误的 `@Resource` 注解或指定了错误的 bean 名称。
如果你仍然无法解决问题,可以尝试使用调试工具或打印日志来诊断问题的根本原因。
阅读全文