我在用策略模式实现业务的时候,具体的策略实现类就无法获取到bean
来源:6-5 不使用自动注入你还会获取上下文吗?(下)
弗兰克的IT生活
2020-09-09
场景描述
业务需要实现一个类似聚合支付到工具包,我通过自定义starter的方式实现,用策略模式,根据业务线上配置的yml的key来调用对应到实现,策略模式核心代码(丢失上下文的代码):
public class PayStrategyFactory {
private static Map<String, PayStrategy> PAY_STRATEGY_MAP = new HashMap<>();
// 可能是通过new具体策略,然后上下文就丢掉来,在具体的策略(比如WechatPayStrategy内就无法取到yml的信息了)
static {
PAY_STRATEGY_MAP.put(PayKey.ZHI_FU_BAO, new ZhiFuBaoPayStrategy());
PAY_STRATEGY_MAP.put(PayKey.WECHAT, new WechatPayStrategy());
PAY_STRATEGY_MAP.put(PayKey.BANK, new BankPayStrategy());
}
/**
* 通过构造私有构造函数,达到不会被new的效果
*/
private PayStrategyFactory() {
}
private static final PayStrategy NON_PAY = new EmptyPayStrategy();
public static PayStrategy getPayStrategy(String payKey) {
PayStrategy payStrategy = PAY_STRATEGY_MAP.get(payKey);
return payStrategy == null ? NON_PAY : payStrategy;
}
private interface PayKey {
String ZHI_FU_BAO = "ZHIFUBAO";
String WECHAT = "WECHAT";
String BANK = "BANK";
}
}
项目地址:
github
心态崩了~~~
写回答
2回答
-
弗兰克的IT生活
提问者
2020-09-09
加了下面代码生效了- - ,为什么????
@Configurationpublic class ConfigClass {
/**
* spirng上下文获取类
*
* @return
*/
@Bean()
public SpringContextHolder SpringContextHolder() {
return new SpringContextHolder();
}}00 -
弗兰克的IT生活
提问者
2020-09-09
我使用implements ApplicationContextAware 的方式获取上下文,但是setApplicationContext都没有执行
00
相似问题