java接口多实现注入方法总结
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. 参考
Is it possible to add qualifiers in @RequiredArgsConstructor(onConstructor = @__(@Autowired))?
有没有可能在@RequiredArgsConstructor(onConstructor = @__(@Autowired))中添加限定符?
注: 第二个是第一个翻译
java接口多实现注入方法总结的更多相关文章
- 解决Java接口内部类的main()方法无法打印输出的问题
问题源自<Thinking in Java>关于内部类的章节,例子如下: public interface ClassInInterface{ void howdy(); public c ...
- Java接口成员变量和方法默认修饰符
Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final S ...
- java接口和抽象类
关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...
- Java 接口和抽象类差别
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...
- Java 接口基础详解
目录 Java接口示例 实现一个接口 接口实例 实现多个接口 方法签名重叠 接口变量 接口方法 接口默认方法 接口与继承 继承与默认方法 接口与多态性 在Java中,接口是一个抽象类型,有点类似于类, ...
- 我对面向对象设计的理解——Java接口和Java抽象类
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- Java 接口和抽象类区别(写的很好,转了)
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是 ...
- Java 接口和抽象类--缺省模式
一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...
- Java接口和Java抽象类的认识
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
随机推荐
- EDM响应式邮件框架:MJML
概述 新课题研究:响应式邮件框架MJML(MJML官网:https://mjml.io/)姐妹篇: EDM响应式邮件框架:Formerly Ink 介绍 MJML是一种标记语言,设计用于轻松实现一个响 ...
- 设计一个基于svg的涂鸦组件(一)
基于svg写了一个涂鸦组件,说项目之前先附上几张效果图: 项目地址:SVGraffiti 由于篇幅问题,本文先总体介绍一下项目的大概情况,重点介绍一下组件间的通信方式. 一.项目说明 该项目是基于we ...
- Linux 0.11源码阅读笔记-总览
Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...
- Native方法的使用
Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...
- 单例设计模式(Singleton)
一.单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法) 例如:Hibernate的Se ...
- 微信小程序常用表单校验方法(手机号校验、身份证号(严格和非严格校验、验证码六位数字校验))
util.js function isPhone(value) { if (!/^1(3|4|5|7|8)\d{9}$/.test(value)) { return false } else { re ...
- java-GUI编程之AWT组件
AWT中常用组件 基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Che ...
- Mybatis多表查询出现null字段
写在前面 今天使用mybatis实现多表查询,记录一下其中遇到的坑 mybatis多表查询简介 mybatis多表查询主要有两个方式,通俗易懂的来说就是一个是查询少量属性(association),一 ...
- mpvue使用scss
安装scss 安装命令如下,不带版本号可能会导致报错 npm i sass-loader@7.3.1 -D npm i node-sass@4.14.1 -D 然后修改 build 文件夹下的 web ...
- 基于Nginx实现反向代理
一.nginx的简介 Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服 ...