1. 单实现接口注入方法

1.1 构造注入(推荐)

@RequiredArgsConstructor
public class TestController { // 其只有一个具体的实现类
private final DemoService demoService;
}

1.2 全参构造注入

@AllArgsConstructor
public class TestController { DemoService demoService;
}

注: 当需要注入的全部是service时候, 这两种没有区别, 但是如果要使用@Value等其他注解时, 全参注入会报null. (@Value只是举例, @Value可以使用hutool中的SpringUtil方法代替)

1.3 @Autowired(Spring提供) 与 @Resource(J2EE提供)直接用即可

2. 多实现接口注入方法

public interface BaseService {

    /**
* 创建对象
*
* @param obj 对象
* @return 成功返回id
*/
public int crate(String obj);
} import org.springframework.stereotype.Service;
@Service("baseStudent")
public class BaseStudentServiceImpl implements BaseService { @Override
public int crate() {
System.err.println("添加学生");
return 1;
}
} import org.springframework.stereotype.Service;
@Service("baseTeacher")
public class BaseTeacherServiceImpl implements BaseService { @Override
public int crate() {
System.err.println("添加老师");
return 2;
}
}

2.1 错误尝试

如果还使用以上任意一种方法进行注入的话, 都会报found 2 异常, 具体描述可能不同.

2.2 @Service上添加各自的名称,

注入时候使用@Qualifier("baseStudent")进行指定.

public class TestController {

    @Autowired
@Qualifier("baseStudent")
private BaseService baseService;
}

2.3 使用@Resource指定.

public class TestController {

    @Resource(name = "baseStudent")
private BaseService baseService;
}

2.4 尝试参数注入方法

  • @Setter(onMethod_ = {@Qualifier("")}, onParam = @__(@Qualifier("")))

  • @RequiredArgsConstructor(onConstructor_ = {@Qualifier("")})

都没有成功, 可能是方向错了.

2.5 变量名指定

@RequiredArgsConstructor
public class TestController { // 与1.1和1.2用法相同, 变量名为Service的名字
private final BaseService baseStudent;
}

3. 微服务下的注册与使用

3.1 注册时添加分组名称

public interface BaseService {

    /**
* 创建对象
*
* @param obj 对象
* @return 成功返回id
*/
public int crate(String obj);
} import com.alibaba.dubbo.config.annotation.Service;;
@Service(group = "baseStudent")
public class BaseStudentServiceImpl implements BaseService { @Override
public int crate() {
System.err.println("添加学生");
return 1;
}
} import com.alibaba.dubbo.config.annotation.Service;e;
@Service(group = "baseTeacher")
public class BaseTeacherServiceImpl implements BaseService { @Override
public int crate() {
System.err.println("添加老师");
return 2;
}
}

3.2 使用时使用分组名称进行指定

import com.alibaba.dubbo.config.annotation.Reference;
public class TestController { @Reference(group = "baseStudent")
private BaseService baseService;
}

2.几中的方法并非尝试

4. 参考

注: 第二个是第一个翻译

java接口多实现注入方法总结的更多相关文章

  1. 解决Java接口内部类的main()方法无法打印输出的问题

    问题源自<Thinking in Java>关于内部类的章节,例子如下: public interface ClassInInterface{ void howdy(); public c ...

  2. Java接口成员变量和方法默认修饰符

     Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final S ...

  3. java接口和抽象类

    关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...

  4. Java 接口和抽象类差别

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...

  5. Java 接口基础详解

    目录 Java接口示例 实现一个接口 接口实例 实现多个接口 方法签名重叠 接口变量 接口方法 接口默认方法 接口与继承 继承与默认方法 接口与多态性 在Java中,接口是一个抽象类型,有点类似于类, ...

  6. 我对面向对象设计的理解——Java接口和Java抽象类

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  7. Java 接口和抽象类区别(写的很好,转了)

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是 ...

  8. Java 接口和抽象类--缺省模式

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

  9. Java接口和Java抽象类的认识

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

随机推荐

  1. 浅谈Nodejs应用的主文件index.js的组成部分

    前言 Node妹子的问世,着实让我们前端攻城狮兴奋了一把,尤其本屌听说Javascript可以写服务端后,兴奋的像是看到了二次元萝莉的胖子...(●'◡'●).呃哼...YY先到这里,原谅本屌是个二次 ...

  2. 何使用派生类指针指向基类,即downcast向下转型?

    基类指针指向派生类,我们已经很熟了.假如我们想用派生类反过来指向基类,就需要有两个要求:1)马克-to-win:基类指针开始时指向派生类,2)我们还需要清清楚楚的转型一下. if you want t ...

  3. 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习

    一.技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景. 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等. ...

  4. 在容器使用stress指令进行负载压测

    安装stressstress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这些设备运行的用户 在容器中安装docker容器压测工具 stress #先安装一些基础工具 ...

  5. SpatiaLite 数据库使用记录

    SpatiaLite 数据库使用记录 官网 https://www.gaia-gis.it/fossil/libspatialite/index 下载地址 https://www.gaia-gis.i ...

  6. 【课程汇总】OpenHarmony 成长计划知识赋能第三期系列课程(附链接)

    OpenHarmony 开源开发者成长计划第三期知识赋能课程硬核程度再次升级,带领开发者上手 OpenHarmony 的标准系统应用开发,学习标准设备应用开发,使用 eTS UI 开发分布式应用样例, ...

  7. vue 滚动条样式设置

      App.vue 文件下加入下面css   // 滚动条宽度 ::-webkit-scrollbar{   width: 6px; } /* 定义滚动条轨道 */ ::-webkit-scrollb ...

  8. vue学习day01

    什么是 vue 构建用户界面 用 vue 往 html 页面中填充数据,非常的方便 框架 框架是一套现成的解决方案,程序员只能遵守框架的规范,去编写自己的业务功能! 要学习 vue,就是在学习 vue ...

  9. 从小白到侠客的 Windows 快捷键宝典

    "天下 武功,唯快不破."你是否羡慕过那些电脑键盘侠客,他们操作起电脑行云流水,任务完成的又快又准.这到底是怎么做到的呢?我们是否也能向他们一样达到把键盘操作熟记于心呢?那就跟着笔 ...

  10. OpenHarmony 3.1 Beta 样例:使用分布式菜单创建点餐神器

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘丽红 随着社会的进步与发展,科技手段的推陈出新,餐饮行业也在寻求新的突破与变革,手机扫描二维码点餐系统已经成为餐饮行 ...