SpringBoot详解(二)-Spring Boot的核心

原创 2017年08月30日 23:50:33

SpringBoot详解系列文章:
SpringBoot详解(一)-快速入门
SpringBoot详解(二)-Spring Boot的核心
SpringBoot详解(三)-Spring Boot的web开发
SpringBoot详解(四)-优雅地处理日志

Spring Boot的核心

在上篇中我们成功运行了一个简单的web应用,其中有一个注解被轻易的带过了,但它在Spring Boot中是最重要的注解,没有之一,它就是@SpringBootApplication,本篇将对它与Spring Boot的配置进行深入的介绍。

1、@SpringBootApplication

前面已经说过了,一般Spring Boot的Web应用都有一个xxxApplication类,并使用@SpringBootApplication注解标记,作为该web应用的加载入口。那这个@SpringBootApplication注解到底是何方神圣?通过查看它的源码,可以发现它是一个组合注解:

@SpringBootApplication这个Spring Boot核心注解是由其它三个重要的注解组合,分别是: @SpringBootConfiguration 、 @EnableAutoConfiguration 和 @ComponentScan。

1)@SpringBootConfiguration

@SpringBootConfiguration是Spring Boot项目的配置注解,这也是一个组合注解。

通过上图代码,结合前面所讲的知识,不难猜测出@SpringBootConfiguration与@Configuration存在着某种关系,可以认为@SpringBootConfiguration就相当于@Configuration,在Spring Boot项目中推荐使用@SpringBootConfiguration替代@Configuration,不过因为注释长度问题,往往@Configuration较为常用。

2)@EnableAutoConfiguration

@EnableAutoConfiguration注解用于启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项。

例如:上篇中,我们在编写第一个WEB应用时,就在pom.xml中引入了spring-boot-starter-web的依赖,所以项目中就会引入SpringMVC的依赖,就会自动配置tomcat和SpringMVC。

还有后面使用事务时,会引入spring-boot-starter-jdbc的依赖,让Spring Boot自动配置DataSourceTransactionManager或JpaTransactionManager,等等。。

3)@ComponentScan

@ComponentScan是组件扫描注解,不配置默认扫描@SpringBootApplication所在类的同级目录以及它的子目录(这很重要,后面很应用到这个特性)。当然你也可以自己指定要扫描的包目录,例如:

@ComponentScan(basePackages = "com.lqr.demo1")

2、取消部分自动配置

上面说了,Spring Boot根据项目中依赖的jar包自动配置项目的配置项,而Spring Boot支持的自动配置非常之多,如下图所示(只是其中的一部分):

当自动配置的东西一多了,就容易出问题,上篇中最后出现的”Cannot determine embedded database driver class for database type NONE”错误,就是因为springboot启动时会自动注入数据源和配置jpa,所以我们就需要取消Spring Boot的部分自动配置。至于取消自动配置的方式也相当简单,就是对@SpringBootApplication注解的exclude进行赋值即可,如:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@Controller
public class HelloApplication {
    ...
}

其他的取消自动配置以此类推。

3、自定义Banner

这个知识点其实对开发意义不太,但不妨了解下(可以装个逼~~)。在Spring Boot项目启动时,控制台会输出一个”spring>>>”的banner文字图案,如:

这个banner是可以自定义的,自定义的方法很简单:只需要把想输出的文字保存在banner.txt文件中,然后把这个banner.txt放到resources目录下即可:

运行项目,然后控制台就可以输出banner.txt中的文字了。

Text to ASCII Art Generator (TAAG)这个网站可以得到文字图案。

4、Starter pom

Spring Boot为我们提供了简化企业级开发绝大多数场景的start pom(类似于组件),只要使用了对应的starter pom,Spring Boot就会为我们提供自动配置的Bean。

这里官方给出的starter,以下是”好心人”对这些Starter pom做的翻译:

怎么使用?直接在pom.xml中引入依赖即可(不懂请参考上篇中“第一个Web应用”中pom.xml配置的第二部分,或请自行百度)。

5、使用Xml配置文件

常规开发中,java配置方式已经可以完全取代xml配置方式了,但有时我们并不想使用java配置,而是继续沿用之前的xml配置方式,或者出于其他原因,一定要在xml中进行配置,那该怎么办呢,很简单,使用@ImportResource注解即可:

@ImportResource(value = {"classpath:xxx1.xml","classpath:xxx2.xml"})

6、全局配置文件

Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。

我们知道Spring Boot会根据在pom.xml中依赖的jar包进行自动配置,当我们要对这些jar包对应的框架进行配置又该怎么办呢,没错,可以在全局配置文件(application.properties或者是application.yml)中进行配置,如tomcat的端口配置等。

1)全局配置文件的基本使用(application.properties)

这部分使用application.properties中的书写方式来介绍。

①tomcat端口配置

server.port=8888

②修改Spring MVC拦截路径规则

默认Spring MVC拦截路径规则是/,如果要修改成*.html的话,可以在全局配置文件中进行如下设置:

server.servlet-path=*.html

③视图解析器配置

一样的,Spring Boot也可以通过全局配置文件对视图解析器进行配置:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

④日志输出

Spring Boot对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置:

#设置日志级别
logging.level.org.springframework=DEBUG

2)全局配置文件的进阶使用(application.yml)

这部分使用application.yml中的书写方式来介绍。

properties与yml文件在形式上有所差别,yml文件的书写方式比较简洁,类似eclipse中package的flag呈现方式(而properties文件则像Hierarchical方式)。如上面properties文件中的属性配置使用yml文件来写:

server:
  port: 8080
  context-path: /

spring:
    mvc:
      view:
        prefix: /WEB-INF/views/
        suffix: .jsp

logging:
  level: debug

yml文件在书写时,需要注意一个地方:冒号与值中间是存在空格的!

①自定义属性

全局配置文件并不只是配置Spring Boot中已经存在的属性,我们也可以自定义属性(别忘了,它本身就是一个properties文件),代码需要使用@Value(“${xxx}”)注解来获取这些属性,如:

②属性引用属性

属性引用属性也简单,使用${xxx}就可以引用配置文件中的属性了。

lqr: 666
content: "${lqr} is six six six"

③属性转对象

这个就比较有看点了,以上面的”server.port: 8080”为例,我们可以认为是Server这个类中有一个port属性,其值为8080。可以使用@ConfigurationProperties(prefix = “属性名前缀”)这个注解作为配置文件中属性转对象属性的桥梁,具体如图所示:

Spring Boot的全局配置很强大,同时它可以配置的属性也很多,以上只列出几个常用的属性配置,如需查看完整的全局属性配置,请到spring-boot官方配置文档查看。好了,本篇到此结束,主要介绍了Spring Boot中几个核心注解与自动配置,同时解决上篇中的几个问题,从下篇开始,将针对Spring Boot的web开发进行介绍。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring Boot 运行原理 - 核心注解

3 核心注解 打开上面任意一个AutoConfiguration文件,一般都有下面的条件注解,在spring-boot-autoconfigure-1.5.3.RELEASE.jar的org.spr...
  • xiaolyuh123
  • xiaolyuh123
  • 2017年04月26日 17:15
  • 1601

Spring Boot核心原理-自动配置

作者简介:朱清,毕业于电子科技大学,现任职冰鉴科技高级研发经理,主导冰鉴风控系统架构设计和研发。 之前在公司内部推行spring boot时,有同事跟我提到过,感觉换到spring boot这个...
  • xiaobing_122613
  • xiaobing_122613
  • 2017年02月09日 09:00
  • 6182

Spring核心组件详解(Bean、Context、Core)

上篇文章介绍了Spring的有三个核心组件,它们为什么是Spring的核心组件,它们之间啥关系,都代表了啥角色。 下面将详细介绍每个组件内部类的层次关系,以及它们在运行时的时序顺序。我们在使用 Spr...
  • zlfprogram
  • zlfprogram
  • 2017年07月23日 17:25
  • 2390

SpringBoot15-springboot核心-Spring Boot运行原理

这篇来先通过学习分析Spring Boot的运行原理后,根据已掌握的知识来自定义一个start pom。       Spring Boot关于自动配置的源码在spring-boot-autoconf...
  • wj903829182
  • wj903829182
  • 2017年08月06日 11:44
  • 865

SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

转载请标明出处:  http://blog.csdn.net/forezp/article/details/70437576  本文出自方志朋的博客 springboot采纳了建立生产就...
  • jek123456
  • jek123456
  • 2017年07月02日 14:19
  • 186

SpringBoot开发详解(七)-- Mybatis整合Spring Boot

Mybatis在SpringBoot中的使用使用Mybatis作为ORM框架:如今的接口开发中,ORM框架是我们操作数据库不可或缺的一部分,而其中Hibernate与Mybatis是最为常用的两大框架...
  • qq_31001665
  • qq_31001665
  • 2017年05月14日 00:52
  • 1002

SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

转载请标明出处: http://blog.csdn.net/forezp/article/details/70437576 本文出自方志朋的博客 springboot采纳了建立生产就绪...
  • zwfmu
  • zwfmu
  • 2017年05月03日 22:42
  • 2484

SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

springboot采纳了建立生产就绪Spring应用程序的观点。 Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正...
  • forezp
  • forezp
  • 2017年04月22日 15:04
  • 34223

spring boot初探(二)——springboot配置log4j

spring-boot-starter中默认依赖了spring-boot-starter-logging而他实现的日志组件是Lockback。 事实上官方文档已经讲的非常清楚了,并且提供了两种日...
  • liduote
  • liduote
  • 2017年04月20日 19:35
  • 2026

springboot学习(二) Spring Boot 快速入门

今天给大家介绍一下spring Boot MVC,让我们学习一下如何利用Spring Boot快速的搭建一个简单的web应用。 环境准备 一个称手的文本编辑器(例如Vim、Emacs、Su...
  • zengdeqing2012
  • zengdeqing2012
  • 2017年03月03日 17:28
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringBoot详解(二)-Spring Boot的核心
举报原因:
原因补充:

(最多只允许输入30个字)