当我试图学习spring框架时,我遇到了两个方法。
Object getBean(String var1) throws BeansException;
<T> T getBean(String var1, Class<T> var2) throws BeansException;
我用这段代码对这两个方法做了一点性能测试。
startTime = System.currentTimeMillis();
Customer customer = context.getBean("customerBean", Customer.class);
endTime = System.currentTimeMillis();
System.out.println("NOT CASTED TIME: " + (endTime - startTime));
startTime = System.currentTimeMillis();
Customer customer1 = (Customer) context.getBean("customerBean");
endTime = System.currentTimeMillis();
System.out.println("CASTED TIME: " + (endTime - startTime));
结果是:"NOT CASTED TIME: 17 CASTED TIME: 1 NOT CASTED TIME: 17 CASTED TIME: 1
另外,我还将bean的作用域设置为 "prototype",如果是单人的话,这两个方法的输出是一样的。
有什么不同?
对于功能上的差异,你可以参考这些方法的javadocs.但是为了测试性能,我重新创建了这个场景,下面是我得到的结果。
startTime = System.currentTimeMillis();
Customer customer = context.getBean("customerBean", Customer.class);
endTime = System.currentTimeMillis();
System.out.println("NOT CASTED TIME: " + (endTime - startTime));
startTime = System.currentTimeMillis();
Customer customer1 = (Customer) context.getBean("customerBean");
endTime = System.currentTimeMillis();
输出是: NOT CASTED TIME: 10 CASTED TIME: 0
如果我把顺序反过来,像这样
startTime = System.currentTimeMillis();
Customer customer1 = (Customer) context.getBean("customerBean");
endTime = System.currentTimeMillis();
System.out.println("CASTED TIME: " + (endTime - startTime));
startTime = System.currentTimeMillis();
Customer customer = context.getBean("customerBean", Customer.class);
endTime = System.currentTimeMillis();
System.out.println("NOT CASTED TIME: " + (endTime - startTime));
然后输出的是 CASTED TIME: 10 NOT CASTED TIME: 0
而如果你继续重复代码,你会得到同样的值。 结论:无论哪种方法,只有第一次会花费更多的时间。