zoukankan      html  css  js  c++  java
  • Spring中 @Autowired注解与@Resource注解的区别

    我们经常使用到@Autowired和@Resource进行装配,这两个注解的区别是什么呢。

    相同点:
    @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上。
    不同点:
    (1)提供方:@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;

      @Resource是由javax.annotation.Resource提供,即J2EE提供,需要 JDK1.6及以上。
    (2)注入方式:@Autowired默认按类型装配;@Resource默认按名称装配,也提供按照类型装配;
    (3)@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下: 

    @Autowired() @Qualifier("baseDao")     
    private BaseDao baseDao; 

    @Resource有两个中重要的属性:name和type。name属性指定 byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法 上,即默认取属性名作为bean名称寻找依赖对象。需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象 时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

    @Resource(name="baseDao")     
    private BaseDao baseDao;  

    推荐使用@Resource注解在字段上,这样就不用写setter方法了.并且这个注解是属于J2EE的,减少了与Spring的耦合,这样代码看起就比较优雅 。

  • 相关阅读:
    后向边
    图的割点、桥和双连通分支的基本概念
    Hihocoder 1062 最近公共祖先1
    会场问题 差分解法
    POJ2976 01分数规划 普通题
    Hihocoder 1049
    hihocoder 1050树中最长路
    Hihocoder 1055
    POJ1463
    C语言|博课作业02
  • 原文地址:https://www.cnblogs.com/winner-0715/p/5642145.html
Copyright © 2011-2022 走看看