项目代码地址: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. 如何确定拍照时,相机屏幕是横屏or竖屏?

    http://www.eoeandroid.com/thread-80028-1-1.html TAG_DATETIME时间日期 TAG_FLASH闪光灯 TAG_GPS_LATITUDE纬度 TAG ...

  2. 转载:帮你提升 Python 的 27 种编程语言

    帮你提升 Python 的 27 种编程语言: 出处:http://www.oschina.net/translate/languages-to-improve-your-python

  3. mysql 字段区分大小写

    默认情况下, mysql中的字段是不区分大小写的,所以"aa"与"AA"被认为是一样的. 那么有些特殊情况下,我们希望它区分大小写呢,这时应该怎么办,说出来其实 ...

  4. idea出现插件突然失灵解决方案

    File -> Settings  -> Plgins  把失效的插件重新去掉打钩并重新打钩即可

  5. ubuntu下安装和配置apache2+SVN的详细方法介绍

    ubuntu安装和配置SVN第一步:安装apache2  libapache2-svn subversionsudo apt-get install apache2sudo apt-get insta ...

  6. JSP内置对象—session

    什么是session? session对象是用来在每个用户之间分别保存每个用户信息的对象,以便跟踪用户的操作状态.session的信息保存在server端,session的id保存在client的co ...

  7. Greenplum-cc-web监控软件安装时常见错误

     错误error: 1.no pg_hba.conf entry for host “::1”, user “gpmon”, database “gpperfmon”, SSL off 解决: vi ...

  8. jQuery实现ToolTip元素定位显示功能示例

    记录下,以备将来用到 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  9. hive 表优化

    一.外部表和内部表的区别 (1)创建表时指定external关键字,就是外部表,不指定external就是内部表 (2)内部表删除后把元数据和数据都删除了,外部表删除后只是删除了元数据,不会删除hdf ...

  10. What's new in JDK 8

    (1)http://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html#javase8 (2)https ...