设为首页 加入收藏

TOP

Spring Boot实战之逐行释义HelloWorld(二)
2018-01-01 06:07:05 】 浏览:427
Tags:Spring Boot 实战 释义 HelloWorld
家可以看到,各个组件里面引入jar的时候就不再需要再指定版本号了。另一个地方需要说明一下是配置文件的管理:



  大家可以看到,默认情况下会将/src/main/resources目录下的文件作为资源文件加入到classpath下,另外,这个地方的仅仅对application*.yml,application*.yaml,application*.properties三种文件进行过滤。这个过滤是指什么呢?大家配置过spring mvc的人应该都知道,配置数据库时,我们通常将数据库的信息配置在一个properties文件中,然后在spring的配置文件中通过<property name="driverClass" 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的内容,三个注解的基本作用如下:


  3.4 Application类解析


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


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {


  该注解的主要方法就不说了,大家看下就知道,主要是为上面这些注解提供别名。该注解上前四个注解(@Target(ElementType.TYPE),@Retention(RetentionPolicy.RUNTIME),@Documented,@Inherited)大家应该都知道,不熟悉的朋友自己去看下JDK如何实现自定义的注解。我们详细解释一下后面三个注解:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。


  先看一下SpringBootConfiguration,这个注解比较简单,源码如下:


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}


  这个注解仅仅是继承了@Configu

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Eclipse开发Java出现异常解决小结 下一篇Java集合:整体结构

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目