是否需要在Spring项目中一起使用spring-core和spring-context依赖项?

时间:2013-05-21 15:47:20

标签: java spring maven

我是Spring的初学者,我试图通过阅读分散在互联网上的一些代码来学习它。当我查看这些代码的pom.xml时,我几乎总会看到人们使用“spring-core”和“spring-context”作为该项目的附加依赖项。当我查看依赖层次结构时,我发现spring-core已经在spring-context中了。

所以我的问题:是否有必要同时使用它们? “spring-core”中的“spring-core”和作为单独工件的“spring-core”之间是否存在差异?

2 个答案:

答案 0 :(得分:16)

这称为传递依赖。如果你没有声明spring-core,你仍然会得到它,因为spring-context声明它。

今天,无论你是否声明spring-core,你的代码都可以工作,因为无论如何都要通过传递依赖机制得到它。所以这是一个最佳实践问题,而不是它是否有效。

要问的问题是,为什么我需要弹簧芯?

  • 如果你的代码没有直接引用它,那么你就不需要它,即使spring-context也是如此。因此,让spring-context负责声明它需要spring-core。不要自己声明。
  • 如果您的代码直接引用spring-core中的某些内容,那么您确实需要它,无论spring-context是否需要它。也许在未来的版本中,spring-context将不再依赖于spring-core。所以,你应该声明spring-core。

在一个句子中,您应该明确声明您自己使用的依赖项,即使它们也是过渡性的。

这对玩具项目来说并不重要。但它使大型项目的长期维护变得更加容易。

编辑:spring-core和spring-context密切相关,以上建议并不重要。 重要的一个常见情况是当你有一个依赖于记录包L的库A.如果你自己的代码使用L,那么你最好明确地声明这个依赖,因为A可以很容易地切换将来使用不同的日志包。另一方面,spring-context不太可能转换为不同的提供者来实现spring-core的功能......

答案 1 :(得分:7)

Andrew和Gus都对你的问题做了充分的判断。我想从Spring方面详细阐述一些事情。如果你刚刚开始使用Spring,我认为可以安全地假设你正在努力理解依赖注入的工作原理。

您必须使用BeanFactoryApplicationContext检查样本。事物的bean方面包含在spring-beans jar(如XmlBeanFactory等)中,事物的上下文方面(如ClassPathXmlApplicationContext等)包含在spring-context jar中。

但是,要使用两个依赖注入容器中的任何一个,您将使用core.io包提供的某些公共类(如ClassPathResourceFileSystemResource),并且您的应用程序也依赖于spring-core jar的原因。

另外,请注意您在web.xml中定义的“字符串”属性值如何自动转换为正确的数据类型,如基元类型或包装类型。这通过spring-core jar提供的属性编辑器支持来实现。