项目代码地址:https://github.com/AndyFlower/Spring-Boot-Learn/tree/master/Spring-boot-helloworld

一、Spring Boot优点

  1. 为Spring开发提供更加简单的使用和快速开发的技巧
  2. 具有开箱即用的默认配置功能,能根据项目依赖自动配置
  3. 具有功能更加强大的服务体系,包括嵌入式服务、安全、性能指标、健康检查等
  4. 绝对没有代码生成,可以不再需要XML配置,即可让应用更加轻巧和灵活
  5. 对于第三方技术的使用,提供了非常完美的整合

二、项目创建方式

  1. 使用Maven新建项目
  2. 使用Spring Initializr新建项目(参见之前的文章)

三、基本依赖配置

 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

四、简单的实例

 package com.slp;

 import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("com.slp.mapper")
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

注解@SpringBootApplication标注这是一个Spring Boot应用

main方法使他成为一个主程序,将在应用启动时首先被执行

五、Spring Boot配置

在工程resource文件夹中创建一个application.properties或application.yum文件,该文件会被自动发布到classpath中,并且被Spring Boot自动读取。

不同文件的配置方式有差异,但是是实现的同样的参数项:

application.yml:

 server:
port: 80
tomcat:
uri-encoding: UTF-8

application.properties:

 server.port = 80
server.tomcat.uri-encoding = UTF-8

六、SpringApplication执行流程

1、如果我们使用的是SpringApplication的静态run方法,那么这个方法里面首先需要创建一个SpringApplication对象实例,然后调用这个创建好的SpringApplication的实例run方法。在SpringApplication实例化初始化的时候,它会提前做几件事情

  • 根据classpath里面是否存在某个特征类(org.springframework.context.ConfigurableWebApplicationContext)来决定是否应该创建一个为Web应用使用的ApplicationContext类型,还是应该创建一个标准Standalone应用使用的ApplicationContext类型
  • 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitializer.
  • 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener
  • 推断并设置main方法的定义类

2、SpringApplication实例初始化完成并且完成设置后,就开始执行run方法的逻辑了,方法执行伊始,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载的SpringApplicationRunListener,调用他们的started()方法,告诉SpringApplicationRunListener,SpringBoot应用要开始执行了

3、创建并配置当前SpringBoot应用将要使用的Environment(包括配置要使用的PropertySource以及profile)

4、遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法

5、告诉SpringApplication的showBanner属性被设置为true,则打印banner

6、根据用户是否明确设置了applicationContextClass类型以及初始化阶段的推断结果,决定该为当前SpringBoot应用创建什么类型的ApplicationContext并创建完成,然后根据条件决定是否添加ShutdownHook,决定是否使用自定义的BeanNameGenerator,决定是否使用自定义的ResourceLoader,当然最重要的是将之前准备好的Environment设置给创建好的ApplicationContext使用

7、ApplicationContext创建好之后,SpringApplication会再次借助SpringFactoriesLoader,查找并加载classpath中所有可用的ApplicationContextInitializer然后遍历这些ApplicationContextInitializer的initialize方法来对已经创建好的ApplicationContext进行进一步的处理

8、遍历调用的SpringApplicationRunListener的contextPrepared()方法,通知他们“SpringBoot”应用使用的ApplicationContext准备好了

9、将之前通过@EnableAutoConfiguration获取的所有配置已经其他形式的IoC容器配饰加载到已经准备完毕的ApplicationContext

10、遍历调用所有的SpringApplicationRunListener的contextLoaded()方法,告知所有SpringApplicationRunListener,ApplicationContext装填完毕

11、调用ApplicationContext中是否注册有CommandLineRunner如果有则遍历他们

12、正常情况下,遍历执行SpringApplicationRunListener的finished()方法,并告知“搞定”。

七、自动配置

如前面所说@EnableAutoConfiguration可以借助SpringFactoriesLoader的特性将标注了@Configuration的Javaonfig类加载汇总到最终的ApplicationContext,这只是简化的说明,实际上,基于@EnableAutoConfiguration的自动配置功能拥有更加强大的调控能力。

1、基于条件的自动配置

在Spring框架中,我们可以使用@Conditional这个Annotation配合@Configuration或者@Bean扥来干预一个配置或者bean定义是否能够生效,其最终实现的效果或者语义类似于

if(符合@Conditional规定的条件){

加载当前配置(enable current Configuration)或者注册当前bean定义;

}

比如

 @Conditional({Test.class,User.class})

最主要的是@Conditional可以作为一个Meta Annotation用了标注其他Annotation实现类,从而构建各色的符合Annotation,比如SpringBoot的autoconfigure模块就是基于这一优良传统实现了一批这样的Annotation(@ConditionalOnClass  @ConditionalOnBean @ConditionalOnMissingClass @ConditionalOnMissingBean  @ConditionalOnProperty)

2、调整自动配置的顺序

我们可以使用AutoConfigureBefore和AutoConfigureAfter让当前配置或者组件在某个组件之前或者之后进行

【Spring Boot&&Spring Cloud系列】Spring Boot初识的更多相关文章

  1. spring boot 2.x 系列 —— spring boot 实现分布式 session

    文章目录 一.项目结构 二.分布式session的配置 2.1 引入依赖 2.2 Redis配置 2.3 启动类上添加@EnableRedisHttpSession 注解开启 spring-sessi ...

  2. spring boot 2.x 系列 —— spring boot 整合 redis

    文章目录 一.说明 1.1 项目结构 1.2 项目主要依赖 二.整合 Redis 2.1 在application.yml 中配置redis数据源 2.2 封装redis基本操作 2.3 redisT ...

  3. spring boot 2.x 系列 —— spring boot 整合 dubbo

    文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(boot-dubbo-common) 四. 服务提供者(boot-dubbo-provider) 4.1 提供方配置 4.2 使用注解@Ser ...

  4. spring boot 2.x 系列 —— spring boot 整合 druid+mybatis

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构 项目查询用的表对应的建表语句放置在resour ...

  5. spring boot 2.x 系列 —— spring boot 整合 servlet 3.0

    文章目录 一.说明 1.1 项目结构说明 1.2 项目依赖 二.采用spring 注册方式整合 servlet 2.1 新建过滤器.监听器和servlet 2.2 注册过滤器.监听器和servlet ...

  6. spring boot 2.x 系列 —— spring boot 整合 RabbitMQ

    文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(rabbitmq-common) 四.服务消费者(rabbitmq-consumer) 4.1 消息消费者配置 4.2 使用注解@Rabbit ...

  7. spring boot 2.x 系列 —— spring boot 整合 kafka

    文章目录 一.kafka的相关概念: 1.主题和分区 2.分区复制 3. 生产者 4. 消费者 5.broker和集群 二.项目说明 1.1 项目结构说明 1.2 主要依赖 二. 整合 kafka 2 ...

  8. 【Spring Boot && Spring Cloud系列】Spring Boot的启动器Starter

    Spring Boot的内置Servlet Container: Name Servlet Version Java Version Tomcat8 3.1 Java 7+ Tomcat7 3.0 J ...

  9. 【Spring Boot&&Spring Cloud系列】Spring Boot配置文件

    很多的参数可以配置在application.properties或application.yml文件中 一.BANNER banner.charset=UTF-8 # Banner file enco ...

随机推荐

  1. HDU 3455 Leap Frog(线性DP)

    Problem Description Jack and Jill play a game called "Leap Frog" in which they alternate t ...

  2. Windows下安装Oracle12C(二)

    一.安装Oracle 参考 Windows下安装Oracle12C(一) 二.新建用户 1. 安装完成后,启动SQLPlus,然后输入内置的用户名和密码 用户名:sys   密码:as sysdba ...

  3. UITableView:改变 TableHeaderView 的高度

    参考:http://stackoverflow.com/a/526825 有这么一种需求,在列表顶端显示一些别样的数据,而这个别样的数据则需要通过一个别样的 View 来展现,它便是 UITableV ...

  4. JSTL XML标签库 使用

    推荐博客:http://blog.sina.com.cn/s/blog_4f925fc30101820u.html XML标签库 JSTL提供了操作xml文件的标签库,使用xml标签库可以省去使用Do ...

  5. [转]调试AngularJS应用

    原文链接:Debugging AngularJS Apps from the Console 当我们开发AngularJS应用的时候,我们想在Chrome/FF/IE控制台调试隐藏在应用中的数据和服务 ...

  6. Data Set Config配置元件

    右键点击Jmeter中需要参数化的某个请求,选择添加——配置原件——CSV Data Set Config,会添加一个CSV Data Set Config,需要设置相关的一些内容,具体如下:

  7. 求字符串长度StringLength();

    // StringLength2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int StringLength(char str[]) ...

  8. org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'parentId' in 'class java.lang.String'

    Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ' ...

  9. OO模式-Singleton

    讨论一: 既然仅仅有一个类?为什么非要用一个模式来定义?难道就不能用程序猿之间的约定又或者使用伟大的设计模式来完毕? 1)先来说说全局变量的优点,当定义一个全局变量时,不论什么一个函数或者一行代码都能 ...

  10. spring + Mybatis + pageHelper + druid 整合源码分享

    springMvc + spring + Mybatis + pageHelper + druid 整合 spring 和druid整合,spring 整合druid spring 和Mybatis  ...