spring配置的bean是默认单例,那么在程序中,得到一个实例一定比创建一个实例的速度快,也更加省资源。今天实际测试的时候发现,new 一个对象比spring得到一个对象快多了。后面自己又加了个单例测试,来对比一下,看实测结果:
public static void main(String[] args) { ReceiveProcess receiveProcess; ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); long begin = System.currentTimeMillis(); int num = 10000000; for (int i = 0; i < num; i++) { receiveProcess = (ReceiveProcess) appCt.getBean("textReceive"); } System.out.println("spring得到实例总时间:" + (System.currentTimeMillis() - begin)); long begin2 = System.currentTimeMillis(); ReceiveProcess re = null; for (int j = 0; j < num; j++) { re = new TextReceiveProcess(); } System.out.println("创建实例得到的总时间:"+ (System.currentTimeMillis() - begin2)); ReceiveProcess reInstance = null;; long begin3 = System.currentTimeMillis(); for (int d = 0; d < num; d++) { reInstance = TextReceiveProcess.getInstance(); } System.out.println("单例情况下得到总时间:"+(System.currentTimeMillis() - begin3)); }
得到的结果:
spring得到实例总时间:5257 创建实例得到的总时间:48 单例情况下得到总时间:16
偶尔会出现这种结果,这个结果我就有点不是很理解了,有时候创建的对象和单例得到的实例时间差不多,这是为什么了?
spring得到实例总时间:5258 创建实例得到的总时间:32 单例情况下得到总时间:31
总结一下,不知道有没有跟我一样理解的朋友。以为spring配置的bean比new一个更加省时省力,实际上测试的结果确不是这样子的。我们用spring实际是用spring管理资源,知道一些特性后,直接拿来用。当遇到性能要求时,或许这块的功能反而起到了反作用,今天我所遇到的就是这样的事。