当我尝试学习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));产出如下:
未铸造时间: 17
铸造时间:1
此外,我还为bean.If设置了范围"prototype“--这是单例输出,它们的输出将是相同的。
有什么不同吗?
发布于 2020-05-02 05:50:53
对于功能差异,您可以引用这些方法的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();产出如下:
未铸造时间: 10
铸造时间: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));然后,产出是:
铸造时间: 10
非铸造时间:0
如果您继续进一步重复代码,您将得到相同的值。
结论:无论方法如何,第一次只需要更多的时间。
https://stackoverflow.com/questions/28343538
复制相似问题