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的耦合,这样代码看起就比较优雅 。

  • 相关阅读:
    json_decode 转数组
    json_encode转义中文问题
    ECshop后台新功能权限添加
    mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
    mysql数据库表设计小数类型
    mysql group_concat用法
    PHP socket通信之UDP
    本地tp项目上传服务器报runtime/cache错误
    mysql 命令一套
    linux 9 -- 交互式使用Bash Shell
  • 原文地址:https://www.cnblogs.com/winner-0715/p/5642145.html
Copyright © 2011-2022 走看看