`
lzb7213
  • 浏览: 12850 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

慎用 new ClassPathXmlApplicationContext("application

阅读更多

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初始化的 那么他默认就是单例的

分享到:
评论
5 楼 lzb7213 2009-01-14  
抛出异常的爱 写道
lzb7213 写道
javatracker 写道
有不停new 新实例的人吗?

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

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

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

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

除了测试想不到有什么地方会用到这个,,开发一般是配一次大家一起用.
3 楼 lzb7213 2009-01-14  
javatracker 写道
有不停new 新实例的人吗?

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

本人就是。。。。
哈哈哈。
1 楼 javatracker 2009-01-12  
有不停new 新实例的人吗?

相关推荐

    模拟spring中的ClassPathXmlApplicationContext类的实现

    例如,`new ClassPathXmlApplicationContext("beans.xml")`。 2. **读取配置文件**:在内部,`ClassPathXmlApplicationContext`使用`Resource`接口从类路径中获取XML配置文件。`Resource`对象封装了对资源的访问,...

    spring容器的触发事件 ClassPathXmlApplicationContext的start()方法的用法

    AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml"); ctx.start(); // ContextStartedEvent 发生 ctx.refresh(); // ContextRefreshedEvent 发生 ctx.stop...

    maven相关资料

    ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","dao.xml"}); 或者用通配符: ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:/*....

    spring的基础(一)自己写的ClassPathXmlApplicationContext类

    在本篇博文中,我们将深入探讨Spring框架的基础知识,特别是关注如何自己编写一个`ClassPathXmlApplicationContext`类。`ClassPathXmlApplicationContext`是Spring框架中用于加载和管理配置元数据的核心类,它允许...

    spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext

    例如,我们通常会创建如`new ClassPathXmlApplicationContext("beans.xml")`这样的实例,其中"beans.xml"是定义bean配置的文件。它会扫描指定的类路径下所有符合的XML配置文件,并将其中的bean定义加载到上下文中。 ...

    tiny-spring-step-6-invite-application-context.zip

    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); ``` 获取容器中的Bean,可以通过`getBean`方法: ```java MyService myService = (MyService) context.getBean("myService"); ``...

    dubbo的使用

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationProvider.xml" }); context.start(); System.in.read(); } } ``` 5. **服务消费**:在客户端,配置...

    spring核心

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); (2)ApplicationContext context = new FileSystemXmlApplicationContext ("applicationContext.xml"); 一般用第...

    ActiveMQ-demo

    ApplicationContext ac = new ClassPathXmlApplicationContext("spring/applicationContext-jms-producer.xml"); //获取生产者发送消息服务接口 MessageSender messageSender = (MessageSender)ac.getBean...

    spring依赖注入bean

    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); ``` **Bean 的配置** Bean 的配置通常在 XML 文件中完成,比如 `beans.xml`。在这个文件中,我们可以定义 Bean 的 ID、类名以及...

    spring技术入门相关源码

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //输出spring容器 System.out.println(ctx); //打印加载的bean名称 System.out.println(java.util.Arrays....

    Spring Boot技术知识点:如何读取不同路径里的applicationContext.xml配置文件3

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:/additional-configs/*.xml"}); applicationContext.getAutowireCapableBeanFactory().registerSingleton...

    spring 获得applicationcontext公用方法

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); ``` - 注解配置方式:使用`AnnotationConfigApplicationContext`,传入包含@Configuration注解的类的全限定名: ...

    spring结合mongodb例子(maven java project)

    例子简单的实现了spring结合mongo的例子 ...通过ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mongo.xml");加载方式:App.java 3.列出log日志的java代码获取方式

    Spring获取ApplicationContext对象工具类的实现方法

    ac = new ClassPathXmlApplicationContext("applicationContext.xml"); } public static ApplicationContext getApplicationContext() { // 获得返回的容器对象 return ac; } } ``` 在这个例子中,我们定义...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    在 web 应用中一般用 ContextLoaderListener 加载 webapplication,如果需要在 action 之外或者 control 类之外获取 webapplication,可以使用以下思路:单独写个类放在 static 变量中,类似于: `public class App...

    处理ssh组合框架中如何用getBean获取实体

    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); MyEntity myEntity = (MyEntity) context.getBean("myEntity"); ``` 2. **SSH框架中的bean管理** 在SSH框架中,Spring作为IoC...

    ApplicationContext及它的3种实现.docx

    例如,`new ClassPathXmlApplicationContext("bean.xml")`会查找类路径下的"bean.xml"文件来初始化容器。可以同时加载多个配置文件,只需将文件名放在字符串数组中传入构造函数即可。 - **...

    Spring中使用classpath加载配置文件浅析

    ApplicationContext context = new ClassPathXmlApplicationContext("conf/application-context.xml"); ``` 在这行代码中,"conf/application-context.xml"表示配置文件相对于classpath的路径。Spring会使用当前...

Global site tag (gtag.js) - Google Analytics