设计模式:策略模式(根据参数,调用不同的service接口)
1.定义类容器providers,当spring加载时@PostConstruct(类似构造方法),会先执行init() ; 在init()中,反射"cn.jdk18"的所有带自定义注解@ProviderName的java文件,并且遍历的类要满足被DataProvider继承关系,将满足条件的类放到providers容器中
2.前端url 访问 {basePath}/jdbc 或 {basePath}/kylin 即可调用不用的service
ClassByTypeServiceImpl
@Service
public class ClassByTypeServiceImpl implements ClassByTypeService { private Map<String, Class<? extends DataProvider>> providers = Maps.newConcurrentMap(); @SuppressWarnings("unchecked")
@PostConstruct
public void init() {
Set<Class<?>> setClass = new Reflections("cn.jdk18").getTypesAnnotatedWith(ProviderName.class);
for (Class<?> class1 : setClass) {
if (!class1.isAssignableFrom(DataProvider.class)) {
System.out.println(class1.getName());
ProviderName providerName = class1.getAnnotation(ProviderName.class);
providers.put(providerName.name(), (Class) class1);
} else {
System.out.println("未被继承:" + class1.getName());
}
}
} public Class<?> getClassByType(String type) {
return providers.get(type);
} }
ClassByTypeService
public interface ClassByTypeService {
Class<?> getClassByType(String type);
} ProviderName @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProviderName {
String name();
}
JDBCDataProvider
@ProviderName(name = "jdbc")
public class JDBCDataProvider extends DataProvider{
public void helloWorld(){}
}
KylinDataProvider
@ProviderName(name = "kylin")
public class KylinDataProvider extends DataProvider{
public void helloWorld(){}
}
UserController
@RequestMapping("/getClassByType/{type}")
public String getClassByType(@PathVariable String type){
return "saySomething:"+classByTypeService.getClassByType(type).getName();
}
设计模式:策略模式(根据参数,调用不同的service接口)的更多相关文章
- 15. 星际争霸之php设计模式--策略模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型)
[.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- linkin大话设计模式--策略模式
linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...
- springboot 项目普通类中调用mapper或service接口
1.该类使用@Component注解 2.添加一个本类类型的静态字段 3.创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean 4.创建方法调用mapper或service接口 ...
- 设计模式-策略模式(Strategy Model)
1.概述 在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能. 如在人物比较排序的实现中,我们有 ...
- javascript 设计模式-----策略模式
在<javascript设计模式>中,作者并没有向我们介绍策略模式,然而它却是一种在开发中十分常见的设计模式.最常见的就是当我们遇到一个复杂的表单验证的时候,常常需要编写一大段的if和el ...
- javascript设计模式——策略模式
前面的话 在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方 ...
- [转]js设计模式-策略模式
在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文 ...
随机推荐
- tf.app.flags与argparse功能类似
https://blog.csdn.net/ei1990/article/details/76423277 tensorflow中tf.app.flags与argparse模块有点类似,通过它们都可以 ...
- 文件上传限制条件(JS、后缀、文件名、类型、截断)绕过及修复建议
在现代互联网的Web应用程序中,上传文件是一 种常见的功能,因为它有助于提高业务效率,比如企业的OA系统,允许用户上传图片.视频.头像和许多其他类型的文件.然而向用户提供的功能越多,Web应用受到攻击 ...
- SSRF漏洞(原理、漏洞利用、修复建议)
介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,SSRF攻击的目标是外网无法访问 ...
- Python-求序列长度和序列长度协议-len() __len__
len() 求序列的长度 print(len("beimenchuixue")) print(len([1, 2, 3])) __len__ 对象中实现这个方法,则 len() 方 ...
- Centos-当前和过去登入系统用户信息-last
last 获取当前和过去登入系统的用户相关信息,执行last指令的时候会默认读取/var/log/wtmp文件 相关参数 -a 把客户端IP显示到最后一列 -R 不显示客户端IP地址或主机名 -n 显 ...
- Git入门教程,详解Git文件的四大状态
大家好,欢迎来到周一git专题. git clone 在上一篇文章当中我们聊了怎么在github当中创建一个属于自己的项目(repository),简称repo.除了建立自己的repo之外,我们更多的 ...
- matlab中figure创建图窗窗口
来源:https://ww2.mathworks.cn/help/matlab/ref/figure.html?searchHighlight=figure&s_tid=doc_srchtit ...
- 【题解】一本通例题 S-Nim
\(\color{purple}{Link}\) \(\text{Solution:}\) 这个题就是给\(Nim\)游戏做了一个限制. 考虑一下\(\text{SG}\)函数:给定的局面下对应的\( ...
- 【题解】[USACO09NOV]A Coin Game S
Link \(\text{Solution:}\) 菜鸡自己想出来了状态设计,但是没有实现出来--菜死了 设\(dp[i][j]\)表示该选第\(i\)个,最多选\(j\)个的最优解.注意这里的定义仅 ...
- STM32之旅6——WWDG
WWDG是stm32f103的窗口看门狗,使用的时钟是APB1的时钟,在使用wwdg是被一个小问题困扰了很久--没有打开中断,无法喂狗,一直复位. 初始化完之后需要使能中断: __HAL_WWDG_E ...