首页 > 其他分享 >策略管理类

策略管理类

时间:2024-02-27 17:35:29浏览次数:17  
标签:Map cacheMap CACHE Strategy bean TYPE 策略管理

//定义策略接口
public interface Strategy<T> {

/**
* 策略标识
*
* @return
*/
T strategy();

}

// 定义策略管理器
package com.serviceshare.springboot.strategy;

import com.serviceshare.springboot.SpringContextInitialize;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
* 策略对象管理器
*/
public class StrategyManager {

private static final Map<Class<?>, Map<String, Object>> TYPE_CACHE = new HashMap<>();
private static final Map<Class<? extends Strategy>, Map<String, Object>> TYPE_Strategy_CACHE = new HashMap<>();

public static <T> T byName(Class<T> interfaceZ, String name) {
Map<String, Object> cacheMap = Optional.ofNullable(TYPE_CACHE.get(interfaceZ)).orElse(new HashMap<>());
final Object cacheBean = cacheMap.get(name);
if (cacheBean != null) {
return (T) cacheBean;
}
TYPE_CACHE.putIfAbsent(interfaceZ, cacheMap);
final Object bean = SpringContextInitialize.context.getBean(name, interfaceZ);
cacheMap.put(name, bean);
return (T) bean;
}

public static <T> T byStrategy(Class<? extends Strategy> iStrategyClass, String Strategy) {
Map<String, Object> cacheMap = Optional.ofNullable(TYPE_Strategy_CACHE.get(iStrategyClass)).orElse(new HashMap<>());
final Object cacheBean = cacheMap.get(Strategy);
if (cacheBean != null) {
return (T) cacheBean;
}

TYPE_Strategy_CACHE.putIfAbsent(iStrategyClass, cacheMap);
final Map<String, ? extends Strategy> beans = SpringContextInitialize.context.getBeansOfType(iStrategyClass);
Strategy bean = null;
for (Strategy beanX : beans.values()) {
if (Strategy.equals(beanX.strategy().toString())) {
bean = beanX;
break;
}
}
cacheMap.put(Strategy, bean);
return (T) bean;
}


}


//使用
BankPayService bankPayService = StrategyManager.byStrategy(BankPayService.class, productSubTypeEnum.toString());
PaymentTransQueryDTO paymentTransQueryDTO = bankPayService.payQuery(orderFlow);

标签:Map,cacheMap,CACHE,Strategy,bean,TYPE,策略管理
From: https://www.cnblogs.com/wjxbk/p/18037359

相关文章

  • 验证码风控策略管理
    顶象无感验证提供风控策略的管理功能,包括新增、删除、编辑、导入、导出、查看趋势图、查看版本,灵活地对策略进行配置名单,并实时生效。同时,支持对白名单、灰名单和黑名单进行不同的处理,让管理者能够对名单进行新增、删除、编辑、导出。此外,顶象无感验证更可以对各个组件进行监控,包......
  • Windows Server 中通过组策略管理来禁止员工安装软件的设置
    WindowsServer中通过组策略管理来禁止员工安装软件的设置。这种做法可以有效地限制员工自行安装未经授权的软件,从而保护企业网络安全和管理规范。下面我将对每个步骤进行简要解释。步骤1:打开域控制器的“组策略管理”界面在域控制器上打开“服务器管理器”,选择“工具”菜单......
  • Win10/Win11没有组策略管理器怎么办(亲测有效)
    win10家庭版或win11没有组策略管理器1、新建文本文档输入以下代码@echooffpushd"%~dp0"dir/bC:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum>List.txtdir/bC:\Windows\servicing\Packages\Microsoft-Windows-Group......
  • "system32/secpol" 是指位于Windows操作系统的system32文件夹下的一个名为secpol.msc
    "system32/secpol"是指位于Windows操作系统的system32文件夹下的一个名为secpol.msc的文件。该文件是本地安全策略管理器(LocalSecurityPolicy)的主控制台。它允许用户管理和配置计算机的安全策略。本地安全策略管理器提供了一系列安全设置,可以帮助管理员保护系统免受未经授权的......
  • 关于win11没有gpedit.msc(本地组策略管理)的解决方案
    转载自https://blog.csdn.net/Xingchen0101/article/details/128943201在本地部署一个bat文件里面粘贴以下文本pushd"%~dp0"dir/bC:\Windows\servicin......