Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否需要在spring项目中同时使用spring核心和spring上下文依赖项?_Java_Spring_Maven - Fatal编程技术网

Java 是否需要在spring项目中同时使用spring核心和spring上下文依赖项?

Java 是否需要在spring项目中同时使用spring核心和spring上下文依赖项?,java,spring,maven,Java,Spring,Maven,我是一个春天的初学者,我试图通过阅读一些散布在互联网上的代码来学习它。当我查看这些代码的pom.xml时,我几乎总是看到人们使用“spring核心”和“spring上下文”作为该项目的附加依赖项。当我查看依赖层次结构时,我看到spring核心已经在spring上下文中 所以我的问题是:两者都要用吗?“spring上下文”中的“spring核心”和作为单独工件的“spring核心”之间有区别吗?这称为传递依赖。如果不声明SpringCore,您仍然可以得到它,因为SpringContext声明了它

我是一个春天的初学者,我试图通过阅读一些散布在互联网上的代码来学习它。当我查看这些代码的pom.xml时,我几乎总是看到人们使用“spring核心”和“spring上下文”作为该项目的附加依赖项。当我查看依赖层次结构时,我看到spring核心已经在spring上下文中


所以我的问题是:两者都要用吗?“spring上下文”中的“spring核心”和作为单独工件的“spring核心”之间有区别吗?

这称为传递依赖。如果不声明SpringCore,您仍然可以得到它,因为SpringContext声明了它

今天,无论您是否声明SpringCore,您的代码都能正常工作,因为多亏了可传递的依赖机制,您仍然可以获得它。因此,这是一个最佳实践的问题,而不是它是否有效的问题

要问的问题是,为什么我需要spring core

  • 如果您的代码没有直接引用它,那么您就不需要它,即使spring上下文需要它。所以,让spring上下文负责声明它需要spring核心。不要自己申报
  • 如果您的代码确实直接引用了SpringCore中的内容,那么无论SpringContext是否需要它,您都需要它。也许在未来的版本中,spring上下文将不再依赖于spring核心。所以,您应该声明spring核心
在一句话中,您应该明确声明您自己使用的那些依赖项,即使它们也是通过传递方式引入的

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


编辑:spring核心和spring上下文是如此紧密地联系在一起,以至于上面的建议无关紧要。一种常见的情况是,当您有一个依赖于日志记录包L的库时,这一点很重要。如果您自己的代码使用L,那么您最好显式地声明该依赖关系,因为A将来可以很容易地切换到使用不同的日志记录包。另一方面,spring上下文不太可能为spring核心的功能切换到不同的提供者…

Andrew和Gus都对您的问题做了充分的解释。我只想从春天的角度来阐述一些事情。如果您刚刚开始使用Spring,我认为可以安全地假设您可能正在了解依赖注入是如何工作的

您必须使用
BeanFactory
ApplicationContext
检查示例。事物的bean端包含在
springbean
jar(如
XmlBeanFactory
等)中,而事物的上下文端(如
ClassPathXmlApplicationContext
等)包含在
spring context
jar中

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


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

这是来自内存的,所以评论与回答。。。spring核心很可能是spring上下文中列出的依赖项;但不包括其本身。Maven确实下载了依赖JAR,但如果您的应用程序直接使用spring core中的某些内容,您应该将其列为依赖项,即使您从spring上下文中获得的是间接依赖项。@Gus感谢您的评论。是的。这两个JAR是如此紧密地联系在一起,以至于它不是依赖关系管理中良好实践的典型示例