Spring Boot实战之逐行释义HelloWorld(2)

  该文件又继承了另一个pom文件,即spring-boot-dependencies,这个文件其实就是包含了一大堆的jar,其作用是统一管理spring boot所依赖的jar包的版本,所以之后大家可以看到,各个组件里面引入jar的时候就不再需要再指定版本号了。另一个地方需要说明一下是配置文件的管理:

Spring Boot实战之逐行释义HelloWorld

  大家可以看到,默认情况下会将/src/main/resources目录下的文件作为资源文件加入到classpath下,另外,这个地方的仅仅对application*.yml,application*.yaml,application*.properties三种文件进行过滤。这个过滤是指什么呢?大家配置过spring mvc的人应该都知道,配置数据库时,我们通常将数据库的信息配置在一个properties文件中,然后在spring的配置文件中通过<property value="${jdbc.driver}" /> 的形式引入,这个filter的作用就是在编译的时候将配置文件中配置的名值对替换到spring的配置文件中${xxx}字符,但这个功能不是必要的,即使不进行替换,Spring也能在运行时读取到配置项。

  总结一下:spring-boot-starter-parent的作用::

  1)jar包的版本管理。

  2)配置文件的过滤。

  3)常用插件管理。

  其实从什么的分析可以看出,spring-boot-starter-parent最核心的功能是管理了Spring boot所依赖的所有jar包。不过通parent的方式有一个很明显的问题,很多公司自己有自己的parent文件,而maven是没办法配置多个parent的。如果不使用spring-boot-starter-parent,那应该怎么做??实际上Spring boot提供了另一种方式来解决这个问题,就是在自己的pom文件中加入spring boot的依赖的管理:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

  其实从上面的分析可以看到,这个也是spring-boot-starter-parent 的pom文件的parent,而这个pom文件里面主要就是管理了一大堆的jar包版本。所以导入这个后,就不需要自己再去做版本管理,各个starter会自己根据需要导入对应的jar,但版本号由spring-boot-dependencies统一管理。但是这样的话,spring-boot-starter-parent中的插件就无法使用,并且默认配置文件的过滤功能也没有了。不过这没什么影响,一方面这些功能不是必须的,另一方面如果需要,自己添加也是件很容易的事情。  

  3.3 HelloWorld类解析:

  我们再看下HelloWorld这个类,用过Spring mvc应该知道,其实这个类跟Spring boot没半毛钱关系,业务代码更是没任何跟spring相关的东西,这也是spring一直奉行的一个原则,侵入性极小,这也是Spring成功的一个主要原因。这个类里面跟spring相关的是三个注解,即@Controller,@RequestMapping,@ResponseBody,但是这三个注解也都是Spring mvc提供的。跟Spring boot没有太多联系,在这我就不细讲了,如果不是很清楚,可以去看下Spring MVC的内容,三个注解的基本作用如下:

Controller:标识为一个控制器,spring会自动实例化该类。

RequestMapping:url映射。

ResponseBody:将返回结果自动转换为json串。

  3.4 Application类解析

  最后我们看下Application这个类,你会发现这个类的东西更少,总共就一行有用的代码,即SpringApplication.run(Application.class, args);这个方法的作用是加载Application这个类,那Application这个类有什么特别之处吗?可以看一下,其实这个类的唯一特殊的地方是一个注解@SpringBootApplication,所以Spring boot的运行肯定跟这个注解有着诸多的联系,我们可以看下这个注解的源码:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/79a95b3d96f16aabca4d7b0c2d9053ea.html