聊下Spring注解,@Autowire,@Resource,以及他们的解析过程
时间: 2023-03-26 22:01:43 浏览: 112
@Autowire 和 @Resource 都是 Spring 框架中用于依赖注入的注解。@Autowire 是根据类型进行自动装配,而 @Resource 是根据名称进行自动装配。在解析过程中,Spring 会扫描所有的 Bean,找到符合条件的 Bean 进行注入。如果有多个符合条件的 Bean,@Autowire 会优先根据类型进行匹配,如果还是有多个符合条件的 Bean,就会抛出异常;而 @Resource 则会根据名称进行匹配,如果还是有多个符合条件的 Bean,就会根据类型进行匹配。如果都无法匹配到符合条件的 Bean,就会抛出异常。
相关问题
Spring中@Autowire与@Resource的区别?
`@Autowired` 和 `@Resource` 都可以用来进行依赖注入,但是它们的使用方式和具体实现上有一些区别。
`@Autowired` 是 Spring 框架提供的注解,它会根据类型进行自动装配,并从 Spring 容器中找到匹配类型的 Bean 进行注入。如果有多个 Bean 匹配该类型,可以使用 `@Qualifier` 指定具体的 Bean 名称。
`@Resource` 是 Java EE 5 引入的注解,它会根据名称进行自动装配,并从 Spring 容器中找到名称与成员变量名匹配的 Bean 进行注入。如果没有找到与名称匹配的 Bean,会尝试使用类型进行匹配。
因此,`@Autowired` 更加灵活,可以通过类型进行自动装配,也可以通过 `@Qualifier` 指定具体的 Bean 名称进行注入,而 `@Resource` 则更加严格,只能通过名称进行自动装配。另外,`@Autowired` 是 Spring 框架提供的注解,而 `@Resource` 则是 Java EE 5 引入的注解,因此在使用时需要注意不同的注解需要导入不同的包。
@autowire和@resource
@Autowire和@Resource都是Spring框架中用于依赖注入的注解。其中,@Autowire是Spring自带的注解,而@Resource则是JSR-250规范中定义的注解。
@Autowire注解可以自动实现对其他bean之间的依赖注入,它可以在被注入的bean参数上或setter方法上使用,但无法通过名称注入进行选择。它会按照类型进行注入,并会尝试按照名称进行匹配。如果有多个符合要求的bean,则会抛出异常。
@Resource注解可以通过名称选择要注入的bean,也可以通过类型注入。它默认按照名称进行注入,如果没有通过名称找到,则会按照类型进行注入。和@Autowire不同的是,如果有多个符合要求的bean,则会优先选择名称匹配的。
由于@Resource是JSR-250规范中定义的注解,在使用时需要添加javax.annotation.Resource类路径,而@Autowire则不需要。两者在功能上有所区别,但都是依赖注入的重要注解。
阅读全文