策略模式+SpringBoot自动注入
解决springboot环境中策略模式不能注入bean问题,例如导致注入DAO为null
话不多说,上代码
1公共接口
public interface BusinessStrategy{
public void doOperation(String json);
//根据枚举类型分配策略
ScheduleTypeEnum getStyle();
}
2策略1
@Service
public class BusinessStrategyOneImpl implements BusinessStrategy{
@Resource
BusinessDAO BusinessDAO ;
@Override
public void doOperation(String json) {
}
@Override
public ScheduleTypeEnum getStyle() {
return ScheduleTypeEnum.ONE;
}
策略2
@Service
public class BusinessStrategyTwoImpl implements BusinessStrategy{
@Resource
BusinessDAO BusinessDAO ;
@Override
public void doOperation(String json) {
}
@Override
public ScheduleTypeEnum getStyle() {
return ScheduleTypeEnum.TWO;
}
策略3
@Service
public class BusinessStrategyThreeImpl implements BusinessStrategy{
@Resource
BusinessDAO BusinessDAO ;
@Override
public void doOperation(String json) {
}
@Override
public ScheduleTypeEnum getStyle() {
return ScheduleTypeEnum.THREE;
}
3定义Factory
@Service
public class StrategyFactory {
private final List<BusinessStrategy> strategy;
public StrategyFactory (List<BusinessStrategy> strategy) {
this.strategy = strategy;
}
private Map<String,BusinessStrategy> strategies = new ConcurrentHashMap<>();
/**
* 提前注入
*/
@PostConstruct
public void initStrategy() {
Optional.ofNullable(strategy).orElseGet(ArrayList::new)
.forEach(tracer -> {
strategies.put(tracer.getStyle().getType(), tracer);
});
}
/**
* 上下文对象暴露给服务调用端接口,封装实现方式
* @param needIdea
*/
public void useStrategiesg(String type,String json){
strategies.get(type).doOperation(json);
}
}
4测试调用
@Resource
private StrategyFactory factory;
@Test
public void testStart() throws InterruptedException {
factory.useStrategiesg("one","businessData");
}
本文展示了如何在SpringBoot环境下解决策略模式下bean注入为null的问题。通过创建一个工厂类,利用@PostConstruct注解初始化策略,并根据枚举类型调用相应策略的方法,实现了动态策略选择。测试调用证明了方案的有效性。
720

被折叠的 条评论
为什么被折叠?



