ApplicationContext对象的获取方式

本来这是一个比较简单的问题。

然而在前一段事件项目中出现了一个问题。

问题描述:数据库连接数只增不减,直到数据库链接数爆满,报了一个 too many connection异常。整个服务就挂了,需要重写启动一次才能使用。

一开始的时候,一直以为是dao层那个链接没有释放。把dao层的代码都查了一遍,也从网上搜索了很多关于数据库连接池的东西,但是也没有发现问题。于是就纠结了~~

后台通过mysql的一个命令,status,发现在求职者简历编辑模块,每编辑一次简历,数据库连接数就会只增不减,增加三个(这个数与数据库连接池的一个参数有关,用的是dbcp链接池),于是就又把简历编辑模块的内容检查了一遍,终于找到了罪魁祸首。

在简历编辑的时候,为了重新生成个人简历的静态页面,使用了freemarker。但是freemarker模块的业务层没有使用@Resource,将它交给spring容器来管理。在里面有一行代码为了获取到某个dao层的bean,使用了

ApplicationContext ac = new ClassPathXmlApplicationContext(File file);

ac.getBean(Class clazz);

这句代码,相信很多人,看到这句代码就已经大致猜到了问题的所在了。

ApplicationContext ac = new ClassPathXmlApplicationContext(File file),这句代码相当于又重新初始化了一遍Spring容器。So......‘

问题算是解决了,那么总结一下经验教训。到底该如何正确的获取到bean呢?

1、一般情况下,我们使用spring容器来管理bean,可以直接使用注入的方式来获取到bean

例如:使用@Resource,@Autowire.

2、如果没有将某个bean交给spring容器来管理,我们又该在web项目中如果获取到这个bean呢?

方式一:也是错误的方式,就是使用

ApplicationContext ac = new ClassPathXmlApplicationContext(File file);

ac.getBean(Class clazz);

这种方式的弊端就如上所述,一般用于单元测试,不能在web项目中直接使用。

方式二:使用

ApplicationContext ac1 = WebApplicationContextUtils.

getRequiredWebApplicationContext(ServletContext sc)
                          ApplicationContext ac2 = WebApplicationContextUtils.

getWebApplicationContext(ServletContext sc)
                          ac1.getBean(beanId);
                          ac2.getBean(beanId);说明:

这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。

说明:上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。

这几种方式可能使我们比较常用到的。至于其他的方式,请参考

http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html    星星索深邃的博客。

时间: 2024-10-13 12:04:31

ApplicationContext对象的获取方式的相关文章

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&BeanUtils的使用、自定义BeanUtils工具类

今日内容介绍 u 反射机制的概述和字节码对象的获取方式 u 反射操作构造方法.成员方法.成员属性 u JavaBean的概述&BeanUtils的使用 u 自定义BeanUtils工具类 第1章 反射机制概述.字节码对象的获取方式.反射操作构造方法.成员方法.成员属性 1.1 反射机制的概述和字节码对象的获取方式 1.1.1 反射介绍 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法        这种动态获取的以及动

InetAddress对象的获取方式

简单总结一下InetAddress对象产生的几种方式 代码 package com.demo; import java.net.InetAddress; import java.net.UnknownHostException; /** * * @author Lynn * 1.getByName()和getByAddress()方法的使用: * 2.getLocalHost()方法: * 3.getLoopbackAddress()方法: * 4.注意第三种方式和第四种方式: * */ pub

反射机制的概述和字节码对象的获取方式

1.1.1 反射介绍JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法对于任意一个对象,都能够调用它的任意一个方法这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制. 简单来说, 就可以把.class文件比做动物的尸体, 而反射技术就是对尸体的一种解剖.通过反射技术, 我们可以拿到该字节码文件中所有的东西, 例如成员变量, 成员方法, 构造方法, 而且还包括私有1.1.2 字节码文件获取的三种方式 对象名.getCalss(); // 次方法来自于

组件、对象的获取方式

private TweenPosition tween;//获取TweenPosition组件()ngui) public List<InventoryItemGrid> itemGridList = new List<InventoryItemGrid>();//InventoryItemGrid是放在多个UI对象上的一个脚本的名字 public UILabel coinNumberLabel;//获取UI中的Label void Awake() { tween = this.G

Web开发中获取Spring的ApplicationContext的三种方式

在 WEB 开发中,可能会很少需要显示的获得 ApplicationContext 来得到由 Spring 进行管理的某些 Bean, 今天我就遇到了,在这里和大家分享一下, WEB 开发中,怎么获取 ApplicationContext 一       要想怎么获取 ApplicationContext, 首先必须明白 Spring 内部 ApplicationContext 是怎样存储的.下面我们来跟踪一下源码 首先:从大家最熟悉的地方开始 Java代码   <listener> <

java 反射-反射对象的获取

java.lang.Class对象的获取方式 @SuppressWarnings("all") //压制警告 public class Deam { public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException,

获取applicationContext对象的方法

方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况. 方法二:通过Spring提供的工具类获取ApplicationConte

2016.11.22经验积累(1.item长按与单机,2调用联系人.3.LayoutInflater获取方式)

很早之前就想建立一个微博,记录一下每天工作遇到的问题,第一是为了加深印象,第二是为了给遇见类似问题的同志提供思路.现在微博审批通过了,非常高兴. 1.listView长按事件返回值,之前一直以为是鸡肋,没啥用.昨天项目经理让加一个长按删除功能,结果长按同时触发单机进详情页的动作,断点跑了半天,最后百度,结果让我 吐了一口老血. 如何破:修改长按监听返回值.list长按返回值:false同时触发点击与双击,true只触发双击. 2.调用系统联系人,开始找了系统里封装的代码贴过来,结果测试提bug说

sql server查询可编程对象定义的方式对比以及整合

本文目录列表: 1.sql server查看可编程对象定义的方式对比 2.整合实现所有可编程对象定义的查看功能的存储dbo.usp_helptext2 3.dbo.helptext2的选择性测试 4.总结语 5.参考清单列表 1.sql server查看可编程对象定义的方式对比   上一篇博文重构sql server的sys.helptext存储中写了sys.helptext的限制和输出格式每行自带char(13)和char(10)这两个字符.为了将可编程对象定义查询方式研究透彻,以下表格列出了