寻找资源以帮助了解Spring启动的工作原理

时间:2014-05-28 09:22:06

标签: document spring-boot

我最近在学习Spring引导,它有太多的魔力。我发现大部分资源,包括官方网站,都专注于如何使用它,而不是解释它是如何工作的。有人可以分享这些资源吗?

更新

也许我的描述引起了一些混乱(关闭投票),我实际上是在寻找以下问题的答案:

  1. 在pom.xml中找到“org.springframework.boot:spring-boot-starter-web”时会发生什么?它是否将Tomcat lib jar添加到我的类路径中?是否会生成web.xml? (文件说启动不生成代码)
  2. 启动时发现“org.springframework.boot:spring-boot-starter-data-jpa”会发生什么?会生成persistence.xml吗?如何根据pom.xml中的数据库驱动程序依赖项创建存储库实例?
  3. ...

3 个答案:

答案 0 :(得分:9)

Spring Boot根本不生成任何代码,所有配置都是以编程方式执行的。因此,例如,不会有web.xml文件来配置您的servlet,而是使用servlet 3.0 API在代码中注册它们。

启动器POM提供了一种将jar添加到类路径的便捷方法,但它们本身并不做任何事情。例如,spring-boot-starter-web将添加Tomcat和Spring MVC jar,spring-boot-starter-data-jpa将添加Hibernate和Spring Data JPA等。

一旦你的类路径上有相关的jar,Spring Boot就会尝试为你自动配置。当它启动时,它会查询META-INF/spring.factories个文件以找到可能的配置(here is an example)。

依次尝试每个配置以查看是否可以应用它。配置使用@Condition注释来限制它们何时应用。例如,HibernateJpaAutoConfiguration仅适用于可以找到某些Hibernate类的情况(请参阅here)。自动配置只是典型的Spring @Configuration类,因此您可以查看源代码以查看实际发生的情况。

参考文档(特别是Appendix B)也可能有所帮助。

答案 1 :(得分:0)

根据我的初步理解,我的答案如下。 基本上,Spring Boot正在帮助根据您的要求提供依赖关系。 我们不需要管理pom.xml。 我们只需要包含Spring Boot的正确基础项目。

所有事情都可以在没有Spring Boot的情况下完成,就像所有仅使用Annotation的配置一样。

以下链接可能会对您有所帮助。 http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/index.html

答案 2 :(得分:0)

对包含的广告进行了简单的实验:

  1. 首先运行没有“spring-boot-starter-web”jar的应用程序,“spring-boot”应用程序将是独立应用程序。
  2. 现在添加“spring-boot-starter-web”,“spring-boot”应用程序将启动“tomcat”容器。
  3. 根据我的观察,

    这里有2件事。

    1. pom.xml是要添加的jar的声明。
    2. 一旦SpringBoot应用程序启动,首先它将检查“自动配置”,一旦“spring-boot-starter-web”在类路径中,这将自动启动tomcat。
    3. 有关更多信息,我们需要在--debug选项中运行“spring-boot”应用程序。

      这将发布“自动配置报告”,这将有所帮助。