• @Resource、@Autowired、@Qualifier的注解注入及区别


    一、前言

      spring4.0+版本开发中使用到了自动装配技术,故有了这篇总结博文,后面对接口、实现类、装配注入,做详细解释。

    二、@Resource、@Autowired、@Qualifier 定义说明:

      1、@Resource 默认根据名字注入,其次按照类型搜索

      2、@Autowired 根据类型注入

      3、@Autowired @Qualifie("userService") 两个结合起来可以根据名字和类型注入

    三、程序示例

    1、定义接口 GameService

    package com.tlong.service;
    
    /**
     * 游戏接口
     */
    public interface GameService {
        public void play();
    }

    2、定义两个实现类 GloryOfKingsImpl 、PubgImpl 

    package com.tlong.service;
    
    import org.springframework.stereotype.Service;
    
    /**
     * 王者荣耀
     */
    @Component
    public class GloryOfKingsImpl implements GameService {
    
        @Override
        public void play() {
            System.out.println("王者荣耀 游戏开始......");
        }
    }
    package com.tlong.service;
    
    import org.springframework.stereotype.Service;
    
    /**
     * 绝地求生
     */
    @Component
    public class PubgImpl implements GameService {
        @Override
        public void play() {
            System.out.println("绝地求生 游戏开始......");
        }
    }

    3、定义测试类 TestController

    public class TestController {
    
        //简洁写法:保证变量名是实现类的名称,注意:首字符小写
        @Autowired
        private GameService gloryOfKingsImpl;
    
        //简洁写法:保证变量名是实现类的名称,注意:首字符小写,此处@Resource和@Autowired实现方式相同
        @Resource
        private GameService pubgImpl;
    
    
    
        //如果想指定不一样的变量名要怎么写呢?不能使用上面的自动装配技术也可以理解,在实现类中使用了@Component注解,spring会自为其创建一个bean并给定ID为gloryOfKingsImpl,spring并不知道该变量需要装配哪个实现类
        //写法如下
        //1、使用@Autowired和@Qualifier实现,注意:@Qualifier中的首字符小写
        @Autowired
        @Qualifier("gloryOfKingsImpl")
        private GameService wzry;
    
        //2、使用@Resource实现,注意:@Resource中的首字符小写
        @Resource(name = "pubgImpl")
        private GameService jdqs;
    
        public void playGame(){
            gloryOfKingsImpl.play();
            pubgImpl.play();
            wzry.play();
            jdqs.play();
        }
    }
  • 相关阅读:
    EF框架 处理decimal字段 Sum() 遇到NULL时的特殊处理
    RSA加密解密及RSA签名和验证
    SQL 类似switch的东东用法
    js抛物线动画
    MyBatis的结果映射(resultMap)
    mybatis中#和$符号的区别
    MyBatis 中Mapper.xml中注意事项
    MyBatis sql映射器 Mapper
    MyBatis的自定义别名和内置别名
    MyBatis简单认识(入门)
  • 原文地址:https://www.cnblogs.com/guoyinli/p/9051258.html
Copyright © 2020-2023  润新知