`

spring @Resource 注释的理解

阅读更多

Spring的@Resource

@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面 @Resource 默认按 byName 自动注入罢了。@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。

Resource 注释类位于 Spring 发布包的 lib/j2ee/common-annotations.jar 类包中,因此在使用之前必须将其加入到项目的类库中。来看一个使用 @Resource 的例子:


清单 16. 使用 @Resource 注释的 Boss.java
package com.baobaotao;
import javax.annotation.Resource;
public class Boss {// 自动注入类型为 Car 的 Bean
@Resource private Car car;// 自动注入 bean 名称为 office 的 Bean
@Resource(name = "office")
private Office office;

一般情况下,我们无需使用类似于 @Resource(type=Car.class) 的注释方式,因为 Bean 的类型信息可以通过 Java 反射从代码中获取。

要让 JSR-250 的注释生效,除了在 Bean 类中标注这些注释外,还需要在 Spring 容器中注册一个负责处理这些注释的 BeanPostProcessor

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> 

CommonAnnotationBeanPostProcessor 实现了 BeanPostProcessor 接口,它负责扫描使用了 JSR-250 注释的 Bean,并对它们进行相应的操作。

 

 

------------------------------------------------

@Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的?

 

经过一些代码的测试,我发现,Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。

例子:

@Autowired
private ExamUserMapper examUserMapper;  - ExamUserMapper是一个接口

 

1. spring先找类型为ExamUserMapper的bean

2. 如果存在且唯一,则OK;

3. 如果不唯一,在结果集里,寻找name为examUserMapper的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了

 

@Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如:
@Autowired ()  @Qualifier ( "baseDao" )
 
因为bean的name具有唯一性,理论上是byName会快一点,但spring默认使用byType的方式注入,让我很迷惑,确定不了哪一个真的快。具体到实际应用,感觉差别不大,就看大家的习惯
 
另注:@Resource(这个注解属于J2EE的)的标签,默认是按照byName方式注入的
http://blog.csdn.net/zhiweianran/article/details/8659944
分享到:
评论

相关推荐

    Spring基于注释(Annotation)的配置.pdf

    ### Spring基于注释(Annotation)的配置 #### 一、`@Autowired` 注释 `@Autowired` 是Spring框架提供的一种自动装配机制,用于简化Bean的依赖注入过程。该注解可以应用于类成员变量、方法及构造函数,帮助实现按...

    Spring注释 注入方式源码示例,Annotation

    凡带有@Component,@Controller,@Service,@Repository 标志的等于告诉Spring这类将自动产生对象,而@Resource则等于XML配置中的ref,告诉spring此处需要注入对象,所以用@Resource就有了ref的功效。 要用注解注入方式...

    spring3.x注解

    在 Spring 3.x 中,提供了两种用于属性装配的注解:@Autowired 和 @Resource。 1. @Autowired @Autowired 注解用于自动装配依赖项,默认按照类型匹配的方式(byType)进行注入。可以用于成员变量、setter 方法、...

    关于spring boot中几种注入方法的一些个人看法

    在 Spring 2.5 引入了 @Autowired 注释,我们平常直接引用的时候很少注意这些,只是自己写好了一个方法或者 springboot 自动配置好的一个方法我们要在另一个类中去调用,这个时候,我们就会采用该注释。 2. @...

    spring基础

    @Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,...

    Spring 注解

    本文将详细介绍Spring 2.5及其后续版本中的注解配置方式,包括常见的注解如`@Autowired`、`@Resource`以及如何使用`&lt;context:annotation-config/&gt;`简化配置等。 #### Spring 2.5 的注释 Spring 2.5 版本中,为了更...

    spring4框架系列 [ 5 ]

    在Spring4框架系列的第五部分,我们将深入探讨基于注释的依赖注入,这是Spring框架的核心特性之一,极大地简化了应用程序的配置和管理。本部分主要关注以下五个关键注解:`@Component`、`@Value`、`@Resource`、`@...

    spring-resource:spring resouce code learn(Spring源码学习)

    spring-resourcespring resouce code learn自己学习Spring过程中的一些记录, 太复杂的功能记录大概流程, 一些重要点注释实现细节和补充一些使用的例子spring 源码阅读记录IOCAOPMVCSpringMVC源码分析spring 实战...

    spring注解使用详解

    - `@Resource`:类似于`@Autowired`,但主要针对JSR-250规范,主要用于注入Java EE的资源。 - `@Configuration`和`@Bean`:在Java配置类中声明和定义Bean,可以替代XML配置文件。 ### 5. 结论 Spring的注解配置...

    annotations-api-6.0.53.jar

    spring中注释 @Resource(按名称进行装配) jar包

    spring-common:[已弃用]与Spring Boot应用程序一起使用的通用Spring组件库和相关类

    用于将文件从Resource读取到字符串中 @Log 注释类,用于注入适当的Logger LoggerProvider 提供Logger界面 @LogField 注释类,指示要记录的字段 JdbcProperties 用于保存JDBC DataSource属性的抽象类 Jdbc...

    springboot集成oauth2.0

    在"spring-security-oauth2-example-master"这个项目中,你可以找到一个完整的SpringBoot集成OAuth2.0的示例,包括配置、控制器、服务以及客户端的实现,通过学习和研究该项目,可以更好地理解上述知识点,并实际...

    dependency-injection-spring:Spring依赖注入的最简单示例

    注释@ComponentScan将扫描并在pooky.projects.beans中注册bean。 要运行示例,请使用Main.java 有趣的阅​​读 批注@ Inject,@ Resource和@Autowired之间的区别 更多演示 Java EE World示例可在以下位置找到: : ...

    spring源代码中文详解版

    总的来说,深入理解Spring的源代码,尤其是IoC容器的实现,有助于我们更好地利用Spring框架,优化应用程序设计,并为解决复杂问题提供更强大的工具。通过源代码分析,我们可以了解到Spring如何高效地管理对象生命...

    spring_FrameWork3.0

    ### Spring Framework 3.0 开发教程核心知识点详解 #### 一、Spring Framework 概述 **1.1 节介绍Spring Framework** ...学习这些知识点,可以帮助开发者更好地理解和使用 Spring 框架,构建高质量的应用程序。

    Spring MVC upload/download file(注释和非注释实现)

    Resource file = new FileSystemResource(new File("path/to/your/file")); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file....

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Javadoc提供了详细的注释,解释了每个类和方法的功能,这对于理解和使用库中的功能至关重要。 2. **spring-security-oauth2-2.0.3.RELEASE.jar**:这是实际的库JAR文件,包含编译后的Spring Security OAuth2的代码...

    spring注解大全整理.docx

    * @Component:表示一个带注释的类是一个“组件”,成为 Spring 管理的 Bean 二、依赖注入 * @Autowired:Spring 提供的工具,用于自动注入依赖 * @Resource:JSR-250 提供的注解,用于资源注入 * @Inject:JSR-...

    Spring注释配置:Unexpected exception parsing XML document from class path resource [beans-annotation.xml]-附件资源

    Spring注释配置:Unexpected exception parsing XML document from class path resource [beans-annotation.xml]-附件资源

    spring-boot-2-oauth2-resource-server:带有用户和客户端数据库(JPA,Hibernate,MySQL)的Spring Boot 2 OAuth2资源和授权服务器实现

    Spring Boot 2 Oauth2资源和授权服务器 使用用户和客户端数据库... git clone https://github.com/indrekru/spring-boot-2-oauth2-resource-server.git 您需要在您的环境中安装Maven: Mac(自制): brew install

Global site tag (gtag.js) - Google Analytics