Spring框架中getBean(String var)和getBean(String var1, Class<T>var2)的区别。

问题描述 投票:2回答:1

当我试图学习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",如果是单人的话,这两个方法的输出是一样的。

有什么不同?

java spring javabeans
1个回答
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();

输出是: 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

而如果你继续重复代码,你会得到同样的值。 结论:无论哪种方法,只有第一次会花费更多的时间。

© www.soinside.com 2019 - 2024. All rights reserved.