• 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 统一成一个注释类。

  • 相关阅读:
    win10安装nodejs,修改全局依赖位置和环境变量配置
    JavaScript判断两个对象内容是否相等
    JS判断是否是数组
    Js判断值是否是NaN
    typeof方法重写(区分数组对象)
    JS实现图片懒加载
    输入url到展示页面过程发生了什么?
    html如何在服务端跑起来
    nuxt怎么打包
    如果scss引用了字体图标文件该怎么打包
  • 原文地址:https://www.cnblogs.com/AutumnRhyme/p/5227964.html
Copyright © 2020-2023  润新知