当我尝试学习它时,我在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设置了范围“原型”。如果它是单例,那么它们的输出都是相同的。
有什么区别?
答案 0 :(得分:1)
关于功能上的区别,您可以参考这些方法的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
如果继续重复执行代码,您将获得相同的值。
结论:无论采用哪种方法,第一次都将花费更多时间。