Spring自动扫描与XML配置性能?

时间:2015-03-14 12:01:43

标签: java spring

在过去的所有项目中,我一直工作到现在, bean通过DI bean的XML bean配置文件声明。

但还有另一种方法可以使我们免于冗长的配置,即自动扫描(即<context:component-scan> .. </context:component-scan>), 它从预定义的项目包中检测并实例化我们的bean,在XML文件中不再有繁琐的bean声明。

所以我确信自动扫描方法必定存在一些缺点。那么我们何时应该进行自动扫描以及何时不进行任何评论?

4 个答案:

答案 0 :(得分:0)

应该由Spring自动检测的Bean被视为auto-configured。并且在带注释的类(@Component@Service等)和bean之间存在精确的一对一映射,因此您非常有限地控制bean的连接。

另一方面,手动定义的bean(例如@Bean)应该需要一些配置。在那里你明确定义了一个bean,而不是让Spring容器自动完成它。一个重要的是它将bean与类定义分离,因此您有机会根据需要配置bean,并以自定义方式处理。

所以这两者真是不同。

也就是说,如果你不需要任何特定/自定义配置,那么bean的初始化 - 请注释该类,并让Spring通过自动扫描为你做的事情。

如果需要配置bean,则以自定义方式初始化 - 将其声明为bean。

答案 1 :(得分:0)

这个问题先前曾问过。请看this question

虽然这里还有更多。

注释比XML有很多优点,仅举几例:

  • 静态类型检查 - 编译器将检查注释(一旦定义正确)适用的位置以及如何
  • 清洁代码 - 更容易看到(视觉上)注释中定义的元数据

然而它出现在价格:当您想要更改某些内容时,XML不需要重新编译。使用注释,您将不得不重新编译。

答案 2 :(得分:0)

根据我的经验,显式bean主要用于第三方类(例如创建DataSource,SessionFactory,...)。

如果您所控制的课程并且您不需要单例或请求范围bean,则没有理由不对此类进行组件扫描。 只有当你需要在app中拥有奇怪数量的这类bean时才需要明确定义这样的bean(例如2,3)。在这种情况下,您可能希望使用命名bean。但这种情况应该非常罕见,可能会指出设计问题。

答案 3 :(得分:0)

自动扫描有几个缺点,我们遇到了自动扫描。

  1. 如果你有少数其他模块使用的java模块,java模块中的自动扫描会导致bean的创建,无论你是否需要它。相反,如果未启用自动扫描,则可以在依赖项目中通过xml实例化所需的内容。在我们的应用程序中,我们的一个Web模块依赖于12个不同的项目,我们遇到了类似的问题。

  2. 除了perf方面,如果有两个bean具有相同的id和类型,如数据源bean,在两个不同的java项目中并且是自动扫描的,那么您的依赖项目中就会发生冲突。如果没有自动扫描,Xml可以帮助避免它们。

相关问题