gpt4 book ai didi

java - 如何将applicationContext中加载的spring bean转换为接口(interface)?

转载 作者:行者123 更新时间:2023-12-01 11:48:19 24 4
gpt4 key购买 nike

我正在创建一个策略工厂,它通过 applicationContext 加载所有具有特定注释的 bean。在我的服务中,我想将一个字符串参数传递给这个工厂,它应该返回我正确的实现。但我面临着 Actor 异常:

    @Autowired
private ApplicationContext applicationContext;

private Map<String,Object> strategyCache = new HashMap<>();


@PostConstruct
public void init(){

Map<String, Object> annotatedBeanClasses = applicationContext.getBeansWithAnnotation(SimulationType.class);

for(Object bean : annotatedBeanClasses.values()){

SimulationType strategyAnnotation = AnnotationUtils.findAnnotation(bean.getClass(), SimulationType.class);
strategyCache.put(strategyAnnotation.platform(),bean.getClass());

}
}


public SimulationStrategy getSimulationStrategy(String platform){
SimulationStrategy strategy = (SimulationStrategy) strategyCache.get(platform);
return strategy;
}

我是我的服务人员,我想这样称呼:

SimulationStrategy strategy = simulationFactory.getSimulationStrategy(platform);

这是我的策略类(class):

@Component
@SimulationType(platform="costumer")
public class ProductSimulation extends SimulationTemplate {
Do Stuff....
}

最佳答案

您将 bean 的 Class 放入 Map 中,而不是 bean 本身。

strategyCache.put(strategyAnnotation.platform(), bean.getClass());

应该是

strategyCache.put(strategyAnnotation.platform(), bean);

关于java - 如何将applicationContext中加载的spring bean转换为接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28972070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com