8

我需要动态创建对象。我使用 Spring 创建类名映射。现在我可以使用

春天ApplicationContext.getbean(className)

或者

爪哇Class.forName(className).newInstance()

哪种方法更有效?

谢谢。

4

3 回答 3

8

如果 spring bean 是一个原型范围的 bean,那么 Spring 将不得不用反射来实例化它,因此必须做你的第二个片段所做的事情。但是要求 Spring 上下文获取一个 bean 并不仅仅为您获取一个类的新实例。它返回一个 Spring bean,您可以在其上应用方面(安全性、事务性等)、注入依赖项等。

你不应该根据性能来选择调用什么,而是根据你想要得到什么。无论如何,与您的应用程序执行的其他操作(网络调用、数据库查询等)相比,这两个调用的成本可能可以忽略不计。

于 2012-07-29T15:32:06.960 回答
1

如果它是 Spring 托管 bean,则需要通过 ApplicationContext 创建它,否则将不会填充依赖项。如果它不是 Spring bean,只是一个普通的 Java 对象,那么这是不必要的开销,所以你可以使用后者。

于 2012-07-29T15:30:55.043 回答
1

spring 解决方案还为您解决了已创建对象中的依赖关系。您还可以查看Spring 查找方法注入功能

于 2012-07-29T15:32:58.573 回答