Spring Boot 获取某接口所有实现类
https://blog.csdn.net/qq_39237801/article/details/112299013
使用Spring的getBeansOfType实现接口多实现类的动态调用
https://blog.csdn.net/u012501054/article/details/103927674/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
记一次applicationContext.getBeansOfType方法的应用场景
https://blog.csdn.net/weixin_43568232/article/details/109616116?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control&dist_request_id=1331647.22027.16184783653183445&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control
--https://blog.csdn.net/asdfayw/article/details/75507917
https://www.zhihu.com/question/38597960
绪论
在springboot项目中,为了方便,我们可能需要获取某一个接口下面的所有实现类,根据名称进行匹配使用。
正文
1、ServiceLocator.java
package com.yang.config;
import com.yang.workOrder.service.IRootService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* explain:获取应用上下文并获取相应的接口实现类
*
* @author yang
* @date 2021/1/5
*/
@Component
public class ServiceLocator implements ApplicationContextAware {
/**
* 用于保存接口实现类名及对应的类
*/
private Map<String, IRootService> map;
/**
* 获取应用上下文并获取相应的接口实现类
* @param applicationContext
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
//根据接口类型返回相应的所有bean
map = applicationContext.getBeansOfType(IRootService.class);
}
/**
* 获取所有实现集合
* @return
*/
public Map<String, IRootService> getMap() {
return map;
}
/**
* 获取对应服务
* @param key
* @return
*/
public IRootService getService(String key) {
return map.get(key);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2、IRootService.java
package com.yang.workOrder.service;
import com.alibaba.fastjson.JSONObject;
import com.yang.workOrder.entity.WorkOrder;
/**
* explain:基础流程操作服务接口
*
* @author yang
* @date 2021/1/5
*/
public interface IRootService {
/**
* 开始流程
* @param workOrder
* @return
*/
boolean startProcess(WorkOrder workOrder);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
3、RootA001ServiceImpl.java
package com.yang.workOrder.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yang.workOrder.entity.WorkOrder;
import com.yang.workOrder.service.IRootService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* explain:A_001流程审批实现类
*
* @author yang
* @date 2021/1/5
*/
@Service("A_001")
public class RootA001ServiceImpl implements IRootService {
private static final Logger LOGGER = LoggerFactory.getLogger(RootA001ServiceImpl.class);
@Override
public boolean startProcess(WorkOrder workOrder) {
return false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
4、RootA002ServiceImpl.java
package com.yang.workOrder.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yang.workOrder.entity.WorkOrder;
import com.yang.workOrder.service.IRootService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* explain:A_002流程审批实现类
*
* @author yang
* @date 2021/1/5
*/
@Service("A_002")
public class RootA002ServiceImpl implements IRootService {
private static final Logger LOGGER = LoggerFactory.getLogger(RootA002ServiceImpl.class);
@Override
public boolean startProcess(WorkOrder workOrder) {
return false;
}
}
————————————————
版权声明:本文为CSDN博主「3y先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39237801/article/details/112299013
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
· 全程使用 AI 从 0 到 1 写了个小工具
2020-04-15 集线器和交换机的区别?
2020-04-15 你必须知道的Dockerfile_重要看
2020-04-15 JAVA知识点汇总
2018-04-15 怎么有效休息眼睛?
2018-04-15 关于网闸原理的研究
2018-04-15 2U网络机箱的尺寸是多少,4U网络机箱的尺寸是多少