
项目中使用new ClassPathXmlApplicationContext()获得spring上下文对象的问题
发布日期:2021-07-20 20:53:45
浏览次数:35
分类:技术文章
本文共 1499 字,大约阅读时间需要 4 分钟。
问题背景:在我们的web程序中,用spring来管理各个实例(bean), 有时在程序中为了使用已被实例化的bean, 通常会用到这样的代码:
ApplicationContext appContext =
new ClassPathXmlApplicationContext("classpath:META-INF/spring/applicationContext-common.xml");
ApplicationContext appContext=appContextUtil.getContext();
ProjectServiceFacade projectServiceFacade=(ProjectServiceFacade)appContext.getBean("biz.projectServiceFacade");
上述的代码会带来一个问题:因为它会重新装载applicationContext-common.xml并实例化上下文bean, 如果有些线程配置类也是在这个配置文件中,那么会造成做相同工作的的线程会被启两次。一次是web容器初始化时启动,另一次是上述代码显示的实例化了一次。这在业务上是要避免的。
解决方法:不用类似new ClassPathXmlApplicationContext()的方式,从已有的spring上下文取得已实例化的bean。
具体步骤:1)增加一个ApplicationContextUtil类,用来取得上下文ApplicationContext
public class ApplicationContextUtil implements ApplicationContextAware {
private ApplicationContext context;//声明一个静态变量保存
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.context=applicationContext;
}
public ApplicationContext getContext(){
return context;
}}
2) 对ApplicationContextUtil类增加 Spring配置,让Spring完成此工具类的装载并且完成applicationcontext上下文的注入;applicationContext-common.xml配置如下:
//初始化appliationUtil类,并完成ApplicationContext的注入//对业务类注入ApplicationContextUtil实例
3)业务类调用代码如下:
ApplicationContext appContext=appContextUtil.getContext(); ProjectServiceFacade projectServiceFacade=(ProjectServiceFacade)appContext.getBean("biz.projectServiceFacade");
WorkSignService workSignService=(WorkSignService)appContext.getBean("biz.workSignService");
转载地址:https://blog.csdn.net/liao0801_123/article/details/86496770 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2023年03月11日 04时02分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
zyplayer-doc 1.0.0 发布,统一的开发文档管理工具
2019-05-11 01:04:02
Android Q:新系统名称和新特性整理
2019-05-11 01:04:02
Windows 10 1809 新发现导致设备启动故障 Bug
2019-05-11 01:04:01
全球 PC 应用程序有半数已过期未更新
2019-05-11 01:04:01
Firefox Test Pilot 计划正式关闭
2019-05-11 01:04:01
传闻 Android Q 将支持手机应用版本回滚
2019-05-11 01:04:01
谷歌发布自然问答数据集 Natural Questions
2019-05-11 01:04:00
谷歌聘请 macOS 老兵操盘新操作系统 Fuchsia OS
2019-05-11 01:04:00
Jest 考虑迁移到 TypeScript,阮一峰:Flow 要完
2019-05-11 01:04:00
RHEL 8 删除 MongoDB
2019-05-11 01:04:00
微软对 Windows 10 Mobile 的支持将于12月10日结束
2019-05-11 01:03:59
谷歌与 WordPress 合作构建全新轻量级平台
2019-05-11 01:03:59
7.73 亿 email 信息泄露,你的密码可能在里边
2019-05-11 01:03:59
微软没强迫?Win 10 版本号追踪网站 Buildfeed 关闭
2019-05-11 01:03:58
微软上线新平台 Try .NET,在线运行 .NET 代码
2019-05-11 01:03:58
ZFS On Linux 在 Linux Kernel 5.0 上陷入了困境……
2019-05-11 01:03:58
GitLab 发布补丁修复版本 11.9.6
2019-05-11 01:03:58
ApiBoot 0.1.1.RELEASE 版本发布!!!
2019-05-11 01:03:57
微软为 Chrome 和 Firefox 发布了 Windows Defender 扩展
2019-05-11 01:03:57
TOML-To-Go 更新,支持暗黑模式
2019-05-11 01:03:57