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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM