`

J2EE @Autowired与Spring @Resource注解区别

 
阅读更多

    Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource、

    @PostConstruct及@PreDestroy。

1. @Autowired

    @Autowired是Spring 提供的,需导入

    Package:org.springframework.beans.factory.annotation.Autowired;

    只按照byType 注入。

2. @Resource

    @Resource默认按 byName 自动注入,是J2EE提供的, 需导入Package:  

    javax.annotation.Resource;

    @Resource有两个中重要的属性:name和type ,而Spring将@Resource注解的name属性解析为bean的

    名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用

    type属性时则使用 byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用by

    Name自动注入策略。

 

    @Resource装配顺序
  (1). 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;
  (2). 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;
  (3). 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
  (4). 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一

    个原始类型进行匹配,如果匹配则自动装配;

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

3. 使用区别

    @Resource(name="loginService")
    private LoginService loginService;

 

    @Autowired(required=false)@Qualifier("loginService")
    private LoginService loginService;

 

   (1).@Autowired 与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上;

   (2).@Autowired 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设

    置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合

    @Qualifier注解进行使用;

    (3).@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没

    有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属

    性名进行装配。当找不到与名称匹配的bean时才按照类型进行装 配。但是需要注意的是,如果name属性一旦指

    定,就只会按照名称进行装配。

 

    推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与Spring

    的耦合,这样代码看起就比较优雅

分享到:
评论

相关推荐

    Spring注解@Resource和@Autowired.doc

    Spring 注解@Resource 和@Autowired Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 ...

    你所不知道的Spring的@Autowired实现细节分析

    8. **@Autowired与@Resource的区别** `@Autowired`主要基于类型匹配,而`@Resource`则优先基于名称匹配。`@Resource`是JSR-250规范的一部分,它的行为更接近于传统的J2EE资源注入。`@Autowired`提供了更灵活的依赖...

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

    @Resource 是一个来自 J2EE 的注解,默认按照名称进行装配,名称可以通过 name 属性进行指定,如果没有指定 name 属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在 setter 方法上默认取属性名...

    Spring注解收集1

    - **定义**:`@Resource`注解也是用于自动装配bean的,但它来自于J2EE标准,不仅可以在Spring框架中使用,还可以在其他支持JSR-250规范的容器中使用。 - **示例**: ```java @Resource(name = "beanName") ...

    @resource所需包.rar

    1. **@Resource注解的使用** `@Resource`注解由Java标准提供,最初是用于J2EE环境中的,但在Spring框架中被广泛使用。它的主要目的是通过名称来注入依赖,通常用于注入单例bean。例如: ```java public class ...

    Spring2.5注入

    2. **定义业务逻辑类**:例如UserService,该类需要使用UserDAO进行业务操作,在UserService类中通过@Autowired或@Resource注解来注入UserDAO实例。 3. **配置文件中声明bean**:在beans.xml配置文件中声明...

    J2EE企业级项目开发-3期(KC007) 7.2 精解Spring之IoC原理与具体使用文档.docx

    通过@Autowired、@Resource、@Inject等注解,Spring容器会自动匹配并注入依赖。 3. **容器初始化**:Spring容器读取配置文件,创建并管理Bean实例,处理依赖注入。 4. **Bean的生命周期管理**:Spring容器负责Bean的...

    个人整理Spring 框架

    - **@Resource**和**@Autowired**:分别用于依赖注入,前者基于J2EE标准,后者是Spring特有的,它们可以按照名称或类型自动装配Bean。 - **@Transactional**:用于声明式事务管理,可以指定回滚策略和隔离级别。 - *...

    JAVA面试题总结之框架.docx

    - `@Resource`:与`@Autowired`类似,但基于J2EE标准,按名称匹配。 - `@PathVariable`:获取URL模板变量。 - `@CookieValue`:获取Cookie值。 - `@RequestParam`:将请求参数绑定到方法参数。 - `@...

    spring mvc

    6. **@Resource/@Autowired**:分别用于J2EE和Spring框架中依赖注入。 7. **@Transactional**:用于事务管理。 8. **@ResponseBody**:用于将返回对象转化为JSON字符串,并写入HTTP响应体。 9. **@Scope**:用于指定...

    25个经典的Spring面试问答.docx

    Spring提供了多种注解,如`@Component`、`@Service`、`@Repository`和`@Controller`用于组件扫描,`@Autowired`实现自动装配,`@Qualifier`用于精确匹配依赖,`@Required`确保属性被注入等。 【Bean的生命周期和...

    传智播客_spring_PPT_黎活明_很经典

    通过XML配置文件或注解(如@Autowired、@Resource等),Spring可以自动管理对象的创建和装配,使得代码更易于理解和维护。 2. **容器**:Spring框架包含两个主要容器——Bean Factory和ApplicationContext。Bean ...

    Java 11道中级面试题.docx

    - `@Resource` 与`@Autowired`类似,但默认通过bean的名称进行匹配,是J2EE标准的注解。 2. **线程创建**: - 创建线程主要有两种方式:继承`Thread`类并重写`run()`方法,或者实现`Runnable`接口并提供`run()`...

    Spring中文帮助文档

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

    Spring API

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

Global site tag (gtag.js) - Google Analytics