我是Spring的初学者,我试图通过阅读互联网上散布的一些代码来学习Spring。当我查看这些代码的pom.xml时,我几乎总是看到人们使用"spring-core“和"spring-context”作为该项目的附加依赖项。当我查看依赖层次结构时,我发现spring-core已经在spring-context中了。
所以我的问题是:有必要同时使用这两种方法吗?在"spring-context“中的"spring-core”和作为单独工件的"spring-core“有区别吗?
发布于 2013-05-22 00:00:09
这就是所谓的传递依赖。如果你没有声明spring-core,你仍然会得到它,因为spring-context声明了它。
不管你是否声明了spring-core,你的代码现在都可以工作,因为你无论如何都要感谢可传递的依赖机制。所以这是一个最佳实践的问题,而不是它是否有效的问题。
要问的问题是,为什么我需要spring-core?
spring如果你的代码没有直接引用它,那么你就不需要它,即使-
-
在一句话中,你应该显式地声明你自己使用的那些依赖项,即使它们也是传递性引入的。
这在玩具项目中并不重要。但它使大型项目的长期维护变得容易得多。
编辑: spring-core和spring-context紧密地联系在一起,上面的建议无关紧要。当你有一个依赖于日志包L的库A时,这确实很重要。如果你自己的代码使用L,那么你最好显式地声明这个依赖,因为A将来可以很容易地切换到使用不同的日志包。另一方面,spring-context不太可能为spring-core的功能切换到不同的提供者...
发布于 2013-05-22 00:16:05
Andrew和Gus都完全公正地回答了你的问题。我只想从Spring方面详细阐述一些东西。如果您刚刚开始使用Spring,我认为可以放心地假设您可能正在努力理解依赖注入是如何工作的。
您一定是在复习BeanFactory和ApplicationContext的示例。bean方面的内容包含在spring-beans jar中(如XmlBeanFactory等)。以及事物的上下文方面(如ClassPathXmlApplicationContext等)包含在spring-context jar中。
但是,要使用两个依赖注入容器中的任何一个,您都需要使用某些公共类(如ClassPathResource、FileSystemResource),这些类是由core.io包提供的,这也是您的应用程序依赖于spring-core jar的原因。
另外,请注意您在web.xml中定义的"string“属性值如何自动转换为正确的数据类型,如原语或包装器类型。这是通过spring-core jar提供的属性编辑器支持实现的。
https://stackoverflow.com/questions/16674175
复制相似问题