zoukankan      html  css  js  c++  java
  • spring注入注解@Resource和@Autowired

    一、@Autowired和@Qualifier

    @Autowired是自动注入的注解,写在属性、方法、构造方法上,会按照类型自动装配属性或参数。该注解,可以自动装配接口的实现类,但前提是spring容器中只有一个实现类的bean,多个bean会报错。同样,自动装配其他类型时也一样。

    但同样的类型的bean有多个实例或同样的接口有多个实现类的bean,可以使用@Qualifier指定bean名称,指定bean名称后,就会按照bean的名称匹配。

    • 写在属性上,会自动注入bean到属性里。
    • 写在方法或构造方法上,会将自动注入bean到参数里。

    另外,@AutoWired无法对String、int等常量数据注入。

    装配规则:

      当添加@Qualifier时,按照bean的名称匹配。

      当只写@Autowired时,按照类型自动装配,若同时有多个或一个都不满足,会报错。

    1、写在属性上

    @Autowired默认按照类型注入,匹配属性类型,也可使用@Qualifier指定bean名称,使用bean名称装配。

        @Autowired
        @Qualifier("userServiceImpl")
        private UserService userService;

     2、写在方法上

    @Component("testSon")
    public class Son {
        int num = 99;
    }
        
    
        
    
        @Autowired
        public Father(@Qualifier("testSon") Son son) {
            this.son = son;
        }

    二、@Resource

    @Resource并非spring中的注解,而是tomcat内的javax.annotation包下的注解。

    该注解可以写在属性上或方法上,实现自动注入。不能写在构造方法上。

    装配规则:

      当只写注解,默认按属性名查找beanid,查到则直接装配,若spring容器中没有该beanid,则继续安装属性类型匹配,若只有一个匹配,则装配;若同时满足多个则报错。

      当使用了name参数,则只按照name值匹配beanid,没有满足条件,会报错。

    1、@Resource默认安照属性名注入,可使用name和type属性指定bean名称和类型

    @Resource(name="testSon")
    Son son;

     2、写在set方法上

        @Resource(name="testSon")
        public void setSon(Son son) {
            this.son = son;
        }
    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    luogu P4342 [IOI1998]Polygon
    luogu P2051 [AHOI2009]中国象棋
    luogu P3304 [SDOI2013]直径
    luogu P1776 宝物筛选_NOI导刊2010提高(02)
    luogu P2900 [USACO08MAR]土地征用Land Acquisition
    CF1009E [Intercity Travelling]
    luogu P4360 [CEOI2004]锯木厂选址
    luogu P1268 树的重量
    centos7扩展根分区
    tcpdump抓包工具的使用
  • 原文地址:https://www.cnblogs.com/whalesea/p/10877044.html
Copyright © 2011-2022 走看看