项目中使用new ClassPathXmlApplicationContext()获得spring上下文对象的问题
发布日期:2021-07-20 20:53:45 浏览次数:63 分类:技术文章

本文共 1498 字,大约阅读时间需要 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:并发环境下的 查询-修改-持久化 解决方案
下一篇:mysql for update 使用说明

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月26日 23时19分26秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

红旗linux备份,更换红旗Linux: Asianux的yum源为网易源 2019-04-21
把视频接口写入HTML,html5 – MediaSource API – 将多个视频追加/连接到一个缓冲区中... 2019-04-21
cypress测试框架与selenium_后selenium时代Web UI自动化测试框cypress 2019-04-21
中兴力维动环监控接线图_肖东晖:动环是基本点 视频监控是增长点 2019-04-21
js 月份加6个月_个税新变化!收入不超6万元月份暂不预扣个税,需满足3个条件... 2019-04-21
httpservletresponse 重定向浏览器不变的原因_知名浏览器如UC,受到fari可能会受到网络钓鱼攻击... 2019-04-21
css3 animation 位置移动了怎么不占位置_CSS3 动画 2019-04-21
82579lm 必须禁用再启用才正常_哈工大被禁用Matlab,国产企业开发替代软件,后劲十足... 2019-04-21
maven 修改文件名_[070]maven 2019-04-21
dcom组件有excel没有word_技术共享 | Java后台导出word实现思路 2019-04-21
word中套用表格样式在哪里_Word 中的表格如何排序? 2019-04-21
螺旋进刀非法平面选择_进刀方法、刀片类型、术语...螺纹加工重点知识你都知道吗?... 2019-04-21
lisp方格网法计算土方量_分享:方格网土方工程量计算实例例题(某工厂厂区)... 2019-04-21
getset原子性 redis_科普:Redis 分布式锁进化史(解读 + 缺陷分析) 2019-04-21
海门开发区机器人项目_关注!2019年省重大项目排定,海门这4个项目凭实力入选... 2019-04-21
拟真机器人拯救者怎么来_R7000P来了,开学季拯救者游戏本该咋选?(附产品对比)... 2019-04-21
maxdea如何计算指数_【股票多因子系列】BARRA风格因子的计算方式 2019-04-21
华为业务板块_手机业务受挫,华为把目光投向了哪些新市场 2019-04-21
除中文外的正则_java正则表达式入坑指南 2019-04-21
获取表数据_DBus数据库表结构变更处理方案 2019-04-21