`
123003473
  • 浏览: 1064515 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring注解@Resource和@Autowire的区别

 
阅读更多
转载自http://blog.csdn.net/WilliamChang/archive/2009/05/22/4205529.aspx
在java代码中可以使用@Autowire或者@Resource注解方式进行装配,这两个注解的区别是:

@Autowire默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用;

@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象.
注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖的对象时候,会回退到按照类型装配,但一旦指定了name属性,就只能按照名称装配了.
建议使用@Resource。


spring中autowire的用法 

Autowire模式就是在spring的声明文件里用作进行对象间的关联关系自动绑定的,就是在 spring beanfactory内的一个bean对其bean的引用可以自动进行,而不一定用ref=的方式显式声明。在reference的3.3.6节有详细 的介绍,autowire主要有5种模式:



1 no

不使用Autowire,引用关系显示声明,spring的reference也 建议不用autoware,因为这会破坏模块关系的可读性,原文如下:

Note: as has already been mentioned, for larger applications, it is discouraged to use autowiring because it

removes the transparency and the structure from your collaborating classes.



2 byName

用名称关联,如果指定了这种模式,如

   <bean id="userManagerTarget" class="com.mdcchina.jianghu.logic.UserManager" autowire="byName">

       <property name="baseDAO"/>

   </bean>

这样对于bean userManagerTarget的属性baseDAO,spring就会自动去引用同名的bean,也就是上面的声明和下面是等价的:

   <bean id="userManagerTarget" class="com.mdcchina.jianghu.logic.UserManager" autowire="no">

       <property name="baseDAO">

          <ref local="baseDAO"/>

       </property>

   </bean>



3 byType

和前面的byName类似的,就是这个属性会在整个beanFactory定义里 找和这个属性一样的bean自动关联上,如果有2个或更多这个类型的bean在beanFactory的定义里,就直接抛异常了,如果没有,就什么都不发 生,这个属性就是null,所以这个只适用与这个属性的类型有且只有一个同类的bean在spring里定义



4 constructor

这个的意思我没有确定的把握,不过感觉用途也不会大,好像是用构造函数新建一个属 性类型的bean并关联上,reference原文是:

This is analogous to byType, but applies to constructor arguments. If there isn't exactly one

bean of the constructor argument type in the bean factory, a fatal error is raised.



5 autodetect

这个的意思好像是说自动决定用byType还是constructor方式,原文 如下:

Chooses constructor or byType through introspection of the bean class. If a default

constructor is found, byType gets applied.



综上所述,感觉上只有byName比较实用一些,但是spring的 reference还是不推荐在定义中用这个功能
分享到:
评论

相关推荐

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

    在阅读《Spring中Autowired和Resource的区别.docx》文档时,可以深入探讨这两个注解的内部实现原理,以及在实际项目中的最佳实践。通过源码分析,我们可以了解到Spring如何解析这些注解并执行依赖注入的过程,这有助...

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

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

    spring-autowire.zip

    本篇文章将通过在IDEA 2020环境下构建的Spring 5小实例,深入解析Spring的@Autowired注解,帮助读者理解和掌握这一关键知识点。 首先,我们需要理解什么是依赖注入(Dependency Injection,DI)。在面向对象编程中...

    3Spring使用annotation方式autowire

    在开发过程中,IDE如IntelliJ IDEA和Eclipse等提供了强大的Spring注解支持。它们可以自动检测并提示注解的使用,同时提供代码补全,帮助开发者快速构建基于注解的Spring应用。 ### 结论 Spring的注解驱动自动装配...

    autowire自动导入句柄

    在Spring框架中,`autowire`是一种...合理使用`@Autowired`、`@Qualifier`和`@Resource`注解,可以灵活地控制bean的自动装配。然而,过度依赖自动装配可能带来问题,因此在设计系统时应平衡自动装配和手动配置的使用。

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.2.1. 创建SqlMap 12.5.2.2. 使用 SqlMapTemplate 和 SqlMapDaoSupport 12.5.3. iBATIS SQL Maps 2.x 12.5.3.1. 创建SqlMapClient 12.5.3.2....

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    本篇将重点讲解Spring的@Autowired自动装配机制,包括XML配置版和注解版,并深入到源码层面进行解析。 @Autowired是Spring框架中的一个核心注解,用于实现自动装配bean的需求。当我们想要在类中注入某个依赖时,...

    自动装配 AutoWire

    虽然@Autowired和@Resource都可以实现依赖注入,但它们有一些区别: - **@Autowired** 默认按类型匹配,可以与JSR-250规范结合使用,支持注解的属性(如required,默认为true)。 - **@Resource** 按名称匹配,它是...

    如何完成spring的最小化XML配置

    然而,随着框架的发展,为了简化配置,Spring引入了最小化XML配置的概念,以及注解装配的方式,使得配置更加简洁和高效。本文将深入探讨如何实现Spring的最小化XML配置。 一、自动装配 1. 四种类型的自动装配 - ...

    spring chm文档

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.3. iBATIS SQL Maps 2.x 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现...

    spring学习笔记

    如果希望Spring自动装配Bean,可以使用`autowire`属性,如`byName`、`byType`、`constructor`和`autodetect`,或者结合注解使用`@Autowired`和`@Resource`。`@Autowired`默认按照类型匹配,而`@Resource`则优先按照...

    strut2和spring整合

    - 虽然这里没有提到,但整合后,Struts2 也可以利用 Spring 的注解(如 `@Autowired`, `@Qualifier`, `@Resource` 等)来进一步简化配置和实现依赖注入。 通过以上步骤,Struts2 框架与 Spring 框架可以无缝集成,...

    Spring2.5 自动扫描classpath

    9. **Spring_demo_09_Resource_Component** - 资源组件(@Resource)注解用于注入资源,它可以自动识别bean的名称,并且支持JSR-250规范。 10. **Spring_demo_06_aop_xml** - 使用XML配置进行AOP,这是在注解方式...

    spring ioc使用教程

    Spring允许通过`autowire`属性实现自动装配,比如`byType`和`byName`,让Spring自动查找并注入匹配类型的Bean。 11. **注解实验**: Spring提供了诸如`@Component`、`@Service`、`@Repository`、`@Controller`等...

    tedu二阶段Spring全教程

    - **@Resource注入**:通过`@Resource`注解实现依赖注入。 - **Spring全注解开发**:通过注解完成整个项目的开发工作,避免了大量的XML配置文件编写。 以上就是对“tedu二阶段Spring全教程”的主要内容进行了详细的...

    spring2.5 学习笔记

    常用的注解包括`@Autowired`、`@Qualifier`、`@Resource`、`@Component`、`@Scope`、`@PostConstruct`和`@PreDestroy`等。 #### AOP(面向切面编程) AOP是Spring的一个重要特性,用于实现横切关注点的模块化。在...

    马士兵Spring,XML部分整理

    9. **Hibernate集成**:在Spring中使用Hibernate,需要配置SessionFactory并注入DataSource,然后通过`@Entity`、`@Id`等注解定义实体类和主键生成策略。事务管理通常在Service层,通过`@Transactional`注解指定事务...

    spring2.5学习笔记

    - **自动装配** (`autowire`): Spring可以根据类型自动匹配并注入Bean,有`byName`、`byType`等方式。 - **byName**: 如果Bean和依赖属性名称相同,则自动装配。 - **byType**: 根据类型匹配依赖。 - **生命周期...

Global site tag (gtag.js) - Google Analytics