`
liu0107613
  • 浏览: 74118 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring的获取Bean的性能测试。

    博客分类:
  • java
阅读更多

package com.liuxt.bean;

import junit.framework.TestCase;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StopWatch;

public class ComputerTest extends TestCase {
 
 public static void main(String[] args) {
  
  AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
    new String[] { "bean/ComputerBean.xml" });
  ComputerBean computer1=(ComputerBean)ctx.getBean("computer");
  ComputerBean computer2=(ComputerBean)ctx.getBean("computer");
  System.out.println("computer1===computer2:"+(computer1==computer2));
  
  testGetBeanFromSpring(ctx);
  testNewInstaniate();

  ctx.destroy();
 }

 private static StopWatch testGetBeanFromSpring(AbstractApplicationContext ctx) {
  StopWatch stopWatch=new StopWatch();
  stopWatch.start();
  ComputerBean computer=(ComputerBean)ctx.getBean("computer");
  for(int i=0;i<100000;i++){
   computer=(ComputerBean)ctx.getBean("computer");
   computer.sum(i,i);
  }
  stopWatch.stop();
  System.out.println("100000 gets took "+stopWatch.getTotalTimeMillis()+" ms");
  return stopWatch;
 }

 private static void testNewInstaniate() {
  ComputerBean computer3;
  StopWatch stopWatch=new StopWatch();
  stopWatch.start();  
  for(int i=0;i<100000;i++){
   computer3=new ComputerBean();
   computer3.sum(i,i);
  }
  stopWatch.stop();
  System.out.println("100000 gets took "+stopWatch.getTotalTimeMillis()+" ms");
 }

}

 

测试的前提条件:

 JDK:java version "1.6.0_13"

winxp  cpu:2.6Ghz

 

测试结果:

  computer1===computer2:false
100000 gets took 907 ms
100000 gets took 0 ms

 

不知道为什么差距这么大。

请大家帮忙解释一下啊。。。期待中。

 

分享到:
评论
2 楼 zhangjunji111 2010-01-18  
airlink 写道
建议你再加个0来循环。
我的测试结果是10倍以上的差距。

spring的获取过程包括了反射和查找bean,其中反射占了大部分时间,这可以加一个用反射创建bean的测试来证明。  

可以看看这个帖子:
http://www.iteye.com/topic/266759?page=2



java6反射应该很快了呀?
1 楼 airlink 2010-01-10  
建议你再加个0来循环。
我的测试结果是10倍以上的差距。

spring的获取过程包括了反射和查找bean,其中反射占了大部分时间,这可以加一个用反射创建bean的测试来证明。  

可以看看这个帖子:
http://www.iteye.com/topic/266759?page=2

相关推荐

    Java中Spring获取bean方法小结

    这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...

    Spring Bean的作用域.docx

    在测试中,我们可以使用`ApplicationContext`来获取Bean,每次获取到的都是同一个对象。 2. **Prototype作用域**:与Singleton相反,Prototype作用域的Bean每次请求都会创建一个新的实例。这意味着,当你调用`...

    我做了个简单的性能测试,发现从bean工厂里单例执行方法效率比new对象执行慢很多

    在IT行业中,性能测试是衡量软件系统运行效率的重要手段。标题提到的问题——“从bean工厂里单例执行方法效率比new对象执行慢很多”,涉及到Java编程中的两种常见对象管理方式:单例模式和直接实例化。这个现象可能...

    Axis2集成Spring.doc

    本文档中的示例通过外部Spring容器获取指定的实现Bean,并通过Axis2提供服务。这涉及到以下几个关键步骤: **1. 创建服务实现类:** - 开发者需要手动编写WSDL文件和服务实现类,而不是使用Axis2提供的工具(如...

    spring测试hikari所需jar包

    在Spring框架中,HikariCP是一个非常流行的高性能数据库连接池。它被广泛采用,因为它的设计目标是提供极低的资源消耗和超快的连接创建速度。在进行Spring项目开发时,为了确保应用程序能够有效地与数据库交互,我们...

    Spring+SpringMVC+Mybatis 基础环境搭建工程(带测试用例)

    一个SSM项目会包含以下关键部分:src/main/java(存放源代码,包括Spring配置、业务逻辑和服务接口)、src/main/resources(存放配置文件,如Spring的bean配置、Mybatis的Mapper配置)、src/test/java(存放测试用例...

    druid-bean的一个测试包

    本测试包针对`Druid`与`Spring`的集成进行了详尽的配置,旨在展示如何利用`Druid`进行数据源管理以及监控,同时包含了方法名正则匹配的拦截器配置,以实现更精细的事务管理和性能分析。 `Druid`的主要优势在于其...

    spring5.2.8.zip

    同时,Spring社区活跃,开发者可以在论坛、Stack Overflow等平台上获取帮助和分享经验。 总之,Spring 5.2.8是一个全面而稳定的版本,它在各个模块上都进行了优化和增强,为开发者提供了更强大的工具和更流畅的开发...

    spring3.2 源码 jar包

    此外,官方文档和社区论坛也是获取更多Spring知识的好去处。 最后,深入理解Spring源码不仅可以帮助你解决实际开发中的问题,还能让你更好地掌握Java企业级应用的开发技巧,为你的职业生涯增色添彩。因此,花时间...

    testNG集成spring

    ### TestNG集成Spring知识点详解 ...在集成Spring和TestNG的过程中,只需让测试类继承`AbstractTestNGSpringContextTests`或`...测试而无需手动加载Spring的`ApplicationContext`或使用`BeanFactory`来获取Bean实例...

    spring_FrameWork3.0

    - **测试模块:** 提供了单元测试和集成测试的支持,方便进行Spring应用的测试。 **1.1-3 节Spring的应用场景** - **Web 应用开发:** Spring MVC 提供了灵活的MVC架构支持,适用于构建各种类型的Web应用。 - **...

    mybatis_spring.rar_Mybatis-spring_mybatis spring jar_mybatis-3.

    它允许你在Spring的bean配置中直接使用Mybatis的SqlSessionFactory和SqlSessionTemplate,从而将Mybatis的Mapper接口直接作为Spring的bean使用。这样,你就可以利用Spring的依赖注入特性来管理和使用这些Mapper,...

    spring

    - **Web开发**:Spring MVC框架提供了一个简洁的MVC实现,用于构建高性能的web应用程序。 - **数据访问**:Spring提供了JDBC抽象层,以及对ORM框架如Hibernate和JPA的支持,简化了数据库操作。 - **事务管理**:...

    如何在spring中等价配置得到原本由jndi配置实现的数据源

    &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt; &lt;/bean&gt; ``` 4. **使用连接池**: 对于生产环境,推荐使用连接池,如HikariCP,它提供了高效且稳定的...

    Spring5.1中文参考指南.pdf

    - **ResourceLoaderAware接口**:允许Bean获取到ResourceLoader实例。 - **资源作为依赖**:如何将资源注入到Bean中。 - **验证、数据绑定与类型转换** - **使用Spring Validator接口**:Spring提供了一套验证...

    spring 源码 依赖 jar包

    6. **Test**:Spring的测试模块提供了对单元测试和集成测试的支持,包括Mock对象、测试注解以及测试上下文框架。 了解这些核心模块后,你需要获取对应的jar包。Spring框架通常由多个jar组成,包括spring-core、...

    jsf+spring整合

    2. **Spring的FacesContextAware**:Spring提供了一个`FacesContextAware`接口,使得Spring的bean可以获取到JSF的`FacesContext`对象,从而在需要时访问JSF的特性。 3. **Spring的NavigationHandler**:Spring可以...

    mybatis和spring 整合的Demo

    9. **AOP和切面**:Spring的AOP功能可以用来实现通用的功能,例如日志记录、性能统计等。在MyBatis-Spring整合中,我们可以创建切面来拦截数据库操作,实现这些附加功能。 10. **Spring Boot集成**:如果使用Spring...

    spring内核详解

    它是Spring应用的主要入口,通过它可以获取到所有Bean并进行操作。 四、AOP(面向切面编程) Spring的AOP模块提供了声明式事务管理、日志记录、性能监控等跨切面关注点的实现。AOP通过动态代理技术,在运行时织入...

Global site tag (gtag.js) - Google Analytics