论坛首页 入门技术论坛

慎用 new ClassPathXmlApplicationContext("application

浏览 5169 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-12   最后修改:2009-01-12

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml") ;

在利用Spring的时候我们经常能要写上边这段代码

但是有些粗心的程序员 会毫无考虑的 在程序中写成上边那样   写的地方无外乎构造函数 或者程序里边用到的地方 殊不知这样写 很可能会造成JVM栈区溢出 原因很简单 new ClassPathXmlApplicationContext("applicationContext.xml") ; 就是给所有的工厂管理BEAN分配内存 而如果上边代码不是单例或者使用该段代码的类不是单例 那就不停的给所配置BEAN分配内存 如果HIBERNATE的SessionFactory也交由SPRING 管理 那么ENTITY就更加耗费内存了

所以好的习惯是 将factory设置为单例模式 或者将使用BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml") ;的类设置为单例 比如如果BeanFactory是依靠WEB.XML初始化的 那么他默认就是单例的

   发表时间:2009-01-12  
有不停new 新实例的人吗?
0 请登录后投票
   发表时间:2009-01-12  
javatracker 写道
有不停new 新实例的人吗?

本人就是。。。。
哈哈哈。
0 请登录后投票
   发表时间:2009-01-14   最后修改:2009-01-14
javatracker 写道
有不停new 新实例的人吗?

我想没有人故意的去不停的new一个新实例 但是往往在开发过程中不注意细节的时候 就会产生此种情况 比如说 在B类写程序的时候突然发现要用到了A类 可以说一般情况下会去NEW A 并不是所有人都考虑是否new A带来些不便
0 请登录后投票
   发表时间:2009-01-14  
lzb7213 写道
javatracker 写道
有不停new 新实例的人吗?

我想没有人故意的去不停的new一个新实例 但是往往在开发过程中不注意细节的时候 就会产生此种情况 比如说 在B类写程序的时候突然发现要用到了A类 可以说一般情况下会去NEW A 并不是所有人都考虑是否new A带来些不便

除了测试想不到有什么地方会用到这个,,开发一般是配一次大家一起用.
0 请登录后投票
   发表时间:2009-01-14  
抛出异常的爱 写道
lzb7213 写道
javatracker 写道
有不停new 新实例的人吗?

我想没有人故意的去不停的new一个新实例 但是往往在开发过程中不注意细节的时候 就会产生此种情况 比如说 在B类写程序的时候突然发现要用到了A类 可以说一般情况下会去NEW A 并不是所有人都考虑是否new A带来些不便

除了测试想不到有什么地方会用到这个,,开发一般是配一次大家一起用.

呵呵 仁兄可能对spring的使用场景有点误解吧 在一般性的WEB应用中 也许正如仁兄所说 但是SPRING并不是为WEB而生的 任何一个讲解SPRING的人 绝对不会在一开始将SPRING和WEB 联系起来 更就不会谈到说什么把那个文件配置在什么地方大家公用就行了 其次 理解仁兄的配置公用 可以理解为父类里边 子类继承 那么就不会存在子类里边随便new实例了 但是当父类被别的类调用的时候 还是有可能会出现问题
  其次 这个观点是从我项目中来的 在我检查项目代码的时候 就发现好几个程序员在代码中用到的时候并没有单例factory 继而导致JVM栈区溢出 所以说 有些事情看上去很简单 说出来大家也许都知道 可是在实际应用的时候 还是会出问题
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics