Spring Framework中getBean(String var)和getBean(String var1,Class <t> var2)之间的差异</t>

时间:2015-02-05 12:05:53

标签: java spring javabeans

当我尝试学习它时,我在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设置了范围“原型”。如果它是单例,那么它们的输出都是相同的。

有什么区别?

1 个答案:

答案 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

如果继续重复执行代码,您将获得相同的值。

结论:无论采用哪种方法,第一次都将花费更多时间。

strong>