gpt4 book ai didi

spring - spring 5 中的 ContextSingletonBeanFactoryLocator 替代方案

转载 作者:行者123 更新时间:2023-12-04 19:28:34 34 4
gpt4 key购买 nike

我们使用的是 4.2.x 版本的 spring,我们使用 ContextSingletonBeanFactoryLocator 来加载 bean,如下所示

BeanFactoryLocator bfLocator = ContextSingletonBeanFactoryLocator.getInstance("classpath:customBeanRefFactory.xml");
BeanFactoryReference ref = bfLocator.useBeanFactory("sharedApplicationContext");
BeanFactory beanFactory = ref.getFactory();
((AbstractApplicationContext) beanFactory).getBeanFactory().setBeanClassLoader(CustomSpringBeanFactory.class.getClassLoader());
return (ApplicationContext) beanFactory

我们计划升级到 spring 5.0.x 并发现 ContextSingletonBeanFactoryLocator 和 BeanFactoryLocator 和 BeanFactoryReference 等类从 spring 5.0 版本中删除。

那么获取应用程序上下文的建议替代方法是什么?
@Configuration
@ImportResource("classpath:ourxml")
public class OurApplicationConfiguration {

}


public class OurAppicationFactoryProvider {

ApplicationContext context;

public ApplicationContext getApplicationContext() {
if (context == null) {
synchronized (this) {
if (context == null) {
context = new AnnotationConfigApplicationContext(OurApplicationConfiguration.class);
}
}
}
return context;
}
}

这是正确的方法还是有其他选择?

最佳答案

在我基于 BeanFactoryLocator/beanRefContext.xml 的遗留应用程序中https://jira.spring.io/browse/SPR-15154中提到的机制, 我加了一个 Singleton类来创建应用程序上下文并使用该上下文。我的代码是

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public enum SpringContextUtil {
INSTANCE;
ApplicationContext context;

public ApplicationContext getApplicationContext() {
if (context == null)
context = new ClassPathXmlApplicationContext("classpath*:beanRefContext.xml");
return context;
}

}

我换了
    final BeanFactoryReference ref = ContextSingletonBeanFactoryLocator.getInstance().useBeanFactory(contextKey);
AbstractApplicationContext context = ((AbstractApplicationContext) ref.getFactory());

经过
AbstractApplicationContext context = (AbstractApplicationContext)SpringContextUtil.INSTANCE.getApplicationContext().getBean(contextKey);

希望能帮助我的人。

该解决方案可能不适用于所有情况。

关于spring - spring 5 中的 ContextSingletonBeanFactoryLocator 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48436555/

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