`
xiaofengxbf
  • 浏览: 19121 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring中@Resource和@Autowired(转)

 
阅读更多

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

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

另外,通过实践,还总结出一条规律:

如果将@requied或者@autowired写了set方法之上,则程序会走到set方法内部。

但如果写在了field之上,则不会进入set方法当中。

分享到:
评论

相关推荐

    (转)Spring中@Autowired注解和@Resource注解的区别

    在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...

    Spring注解@Resource和@Autowired.doc

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

    【Java面试】@Resource 和 @Autowired 的区别.doc

    在 Spring 框架中,@Resource 和 @Autowired 是两种常用的依赖注入方式,但是它们之间存在着一些关键的区别。 首先,让我们来了解 @Autowired 注解。@Autowired 是 Spring 框架提供的一个注解,默认是根据类型来...

    spring框架的@Resource和@Component 程序和文档

    在Spring框架中,`@Resource`和`@Component`是两个重要的注解,它们用于不同的目的,但都与依赖注入(Dependency Injection,简称DI)息息相关。理解这两个注解的使用和区别是掌握Spring框架核心概念的关键。 首先...

    Spring注解@Resource和@Autowired区别对比详解

    主要介绍了Spring注解@Resource和@Autowired区别对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    详解Spring关于@Resource注入为null解决办法

    Spring 框架中,@Resource 注解是一种常用的依赖注入方式,用于将对象注入到应用程序中。但是,在实际开发中,经常会遇到 @Resource 注解的对象为 null 的问题。本文将详细介绍 Spring 中 @Resource 注解解决 null ...

    Spring框架中 @Autowired 和 @Resource 注解的区别

    在Spring框架中,注解是实现依赖注入的重要方式,其中包括`@Autowired`和`@Resource`两个常用的注解。它们虽然都可以用来注入依赖,但在实际使用中存在一些区别。 首先,`@Autowired`注解是Spring框架特有的,主要...

    Spring In Action 使用@Autowired 和@ Resource 自动装配Bean

    在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...

    详解Spring注解--@Autowired、@Resource和@Service

    Spring注解详解 -- @Autowired、@Resource和@Service ...@Autowired、@Resource和@Service都是Spring框架中最常用的注解,它们可以帮助我们解决依赖注入问题,减少配置文件的体积和复杂度,提高开发效率和代码可读性。

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    Spring 依赖注入:@Autowired,@Resource 和@Inject 区别与实现原理 Spring 依赖注入是指在应用程序中将对象之间的依赖关系自动装配的过程。Spring 框架提供了多种依赖注入方式,包括 @Autowired、@Resource 和@...

    1.@Resource是按名称进行注入的,属于java自带的。@Autowired是按类型进行注入的,属于Spring。.pdf

    Spring框架是Java领域中实现DI的典型代表,提供了多种注解来支持这一机制,其中两个常用的注解是`@Resource`和`@Autowired`。虽然它们都可以用来实现依赖注入,但它们的用法和原理有所不同。 首先,`@Resource`注解...

    Spring 中 @Service 和 @Resource 注解的区别

    除了@Service和@Resource,Spring还提供了一些其他常见的注解,包括@Controller(用于控制器,如Struts中的action)、@Repository(用于DAO层组件,数据访问组件)和@Component(通用注解,当组件类别不确定时使用)...

    20 面试官,请不要再问我@Resource和@Autowire注解的区别了慕课专栏(1)1

    在Java Spring框架中,`@Resource`和`@Autowired`都是用于依赖注入(DI)的注解,但它们有着不同的用途和工作原理。本篇文章主要关注`@Resource`注解,探讨其使用方法和实现机制。 `@Resource`注解通常用于按名称注入...

    编码剖析@Resource注解的实现原理

    2. **注解处理**:Spring容器中的`AutowiredAnnotationBeanPostProcessor`和`CommonAnnotationBeanPostProcessor`两个后处理器负责处理`@Autowired`和`@Resource`。`CommonAnnotationBeanPostProcessor`尤其关注`@...

    springmvc @Resource 注解方式问题

    理解`@Resource`注解的工作机制和与`@Autowired`的区别,有助于优化Spring容器的依赖注入,避免潜在的注入错误。在选择使用哪种注解时,开发者应根据项目需求和bean的命名规则来决定。同时,结合使用`@Qualifier`和`...

    Spring使用@Autowired注解自动装配

    在Spring框架中,`@Autowired`注解是一个关键特性,用于简化依赖注入的过程。依赖注入是一种设计模式,它允许我们解耦代码,提高模块的可测试性和可维护性。在这个主题中,我们将深入探讨`@Autowired`的工作原理、...

    @resource所需包.rar

    在Spring框架中,`@Resource`注解是一个关键的组件,用于依赖注入(Dependency Injection,简称DI)。这个注解主要用于标记字段或方法,以便Spring容器能够自动为它们提供所需的对象。下面将详细介绍`@Resource`的...

    用@Resource注解完成属性装配

    如果同时存在`@Autowired`和`@Resource`,Spring会优先考虑`@Resource`,因为它提供了更明确的装配依据(bean的名字)。 ### 配置和选择 在某些复杂场景下,可能有多个同类型的bean,这时可以使用`@Qualifier`注解...

    spring中Resource和Component注解

    在Spring框架中,`@Resource`和`@Component`是两个非常重要的注解,它们用于不同的目的,但都与依赖注入(Dependency Injection, DI)息息相关。这篇文章将深入探讨这两个注解,以及它们如何在Spring应用中协同工作...

Global site tag (gtag.js) - Google Analytics