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