zoukankan      html  css  js  c++  java
  • Spring 注释 @Autowired 和@Resource

    一、

    @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上。

    二、

    @Autowired属于Spring的;@Resource为JSR-250标准的注释,属于J2EE的。

    三、

    @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

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

    四、

    @Resource,默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

     例如:

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

    五、

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

    @Resource  @Autowired(一般情况下我们用的都是Resource注解,因为这个注解不依赖与SpringMVC).

    Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

    1、@Autowired 注解:
    首先在使用时候需要引入配置:

    <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 --> 
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

    在Spring MVC 中 由于配置了“ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>”

    故不使用引入上面自动注入也可实现指定注入功能。

    @Autowired 可以标注在属性,以及set方法上,以及构造函数上.进行标注,然后自动完成注入。

    2、@Qualifier 注解:
    如果配置了多个类型为 User 的 Bean, 那么我们在

    1
    2
    3
    4
    @Autowired
    private User setUser(User user){
    //....
    }

    会出现错误,这个时候我们就需要对注入的对象指定读取Bean的名称,则所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Autowired
    private User setUser(@Qualifier("user1") User user){
    //....
    }
     
    public class Recommender {
        @Autowired
        @Qualifier("main")
        private MovieCatalog log;
    }

    @Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。

  • 相关阅读:
    大数据下的质量体系建设
    快速打造属于你的接口自动化测试框架
    测试环境问题排查的那些事儿
    100个任务,用多机实现
    shell 在一个文件中查找数字
    shell中的awk使用
    shell怎么实现多进程
    删除字符串S1中的子串S2
    C++11的新特性
    C++里面普通指针怎么转换成智能指针
  • 原文地址:https://www.cnblogs.com/AutumnRhyme/p/5227964.html
Copyright © 2011-2022 走看看