【Spring BootSpring Cloud系列】Spring Boot初识
项目代码地址:https://github.com/AndyFlower/Spring-Boot-Learn/tree/master/Spring-boot-helloworld
一、Spring Boot优点
- 为Spring开发提供更加简单的使用和快速开发的技巧
- 具有开箱即用的默认配置功能,能根据项目依赖自动配置
- 具有功能更加强大的服务体系,包括嵌入式服务、安全、性能指标、健康检查等
- 绝对没有代码生成,可以不再需要XML配置,即可让应用更加轻巧和灵活
- 对于第三方技术的使用,提供了非常完美的整合
二、项目创建方式
- 使用Maven新建项目
- 使用Spring Initializr新建项目(参见之前的文章)
三、基本依赖配置
1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>1.5.6.RELEASE</version> 5 <relativePath/> <!-- lookup parent from repository --> 6 </parent> 7 <dependency> 8 <groupId>org.springframework.boot</groupId> 9 <artifactId>spring-boot-starter-web</artifactId> 10 </dependency>
四、简单的实例
1 package com.slp; 2 3 import org.mybatis.spring.annotation.MapperScan; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 7 @SpringBootApplication 8 @MapperScan("com.slp.mapper") 9 public class DemoApplication { 10 11 public static void main(String[] args) { 12 SpringApplication.run(DemoApplication.class, args); 13 } 14 }
注解@SpringBootApplication标注这是一个Spring Boot应用
main方法使他成为一个主程序,将在应用启动时首先被执行
五、Spring Boot配置
在工程resource文件夹中创建一个application.properties或application.yum文件,该文件会被自动发布到classpath中,并且被Spring Boot自动读取。
不同文件的配置方式有差异,但是是实现的同样的参数项:
application.yml:
1 server: 2 port: 80 3 tomcat: 4 uri-encoding: UTF-8
application.properties:
1 server.port = 80 2 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定义;
}
比如
1 @Conditional({Test.class,User.class})
最主要的是@Conditional可以作为一个Meta Annotation用了标注其他Annotation实现类,从而构建各色的符合Annotation,比如SpringBoot的autoconfigure模块就是基于这一优良传统实现了一批这样的Annotation(@ConditionalOnClass @ConditionalOnBean @ConditionalOnMissingClass @ConditionalOnMissingBean @ConditionalOnProperty)
2、调整自动配置的顺序
我们可以使用AutoConfigureBefore和AutoConfigureAfter让当前配置或者组件在某个组件之前或者之后进行
转载于:https://www.cnblogs.com/dream-to-pku/p/7387949.html
【Spring BootSpring Cloud系列】Spring Boot初识相关推荐
- Spring源码系列- Spring Beans - 核心类的基本介绍
Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...
- Spring技术栈系列教程-- SpringMVC 、SpringBoot 、SpringCloud
转载来源:https://mp.weixin.qq.com/s/N507Cfb_mbkGvHtg_FIaVg Spring Boot 系列 什么是 Spring Boot? 告诉你,Spring Bo ...
- Spring Cloud 微服务实战系列-Spring Boot再次入门(一)
导语 看到标题大家都疑惑,为什么叫做再入门呢?在之前的博客中也分享过相关的内容,但为了让Spring Cloud 微服务实战系列更加完整就再次编写一个入门的内容,也是为了这个系列的内容更加的完整, ...
- Spring/Boot/Cloud系列知识(2)— — 代理模式
本文转自:https://blog.csdn.net/yinwenjie/article/details/77848285 代理模式是23种设计模式中的一种,属于一种结构模式.用一句大白话解释这个设计 ...
- Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(1)
1.整体调用过程 本文承接本专题上一篇文章<Spring/Boot/Cloud系列知识:HttpMessageConverter转换器使用方式>,在上一篇文章中讲解了HttpMessage ...
- Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)
(接上文<Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)>) 2.3.通过@PathVariable注解基于URL匹配符接收请求传参 为了便于开发人员实现更 ...
- java小马哥百度网盘_小马哥spring boot和spring cloud系列
资源内容: 小马哥spring boot和spring cloud系列|____小马哥 Java 微服务实践 - Spring Boot 系列 |____pptx ...
- 【小马哥】Spring Cloud系列讲座
这里推荐一个不错的Spring Cloud系列讲座,讲师简介如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师.目前主要负责微服务技术推广.架构设计.基础设施.迁移等 ...
- Spring、SpringMVC、Spring Boot、Spring Cloud 概念、关系及区别
注:此文章转载于其他大神 一.正面解读: Spring主要是基于IOC反转Beans管理Bean类,主要依存于SSH框架(Struts+Spring+Hibernate)这个MVC框架,所以定位很明确 ...
最新文章
- Xamarin.Android 使用Timer 并更改UI
- rhce linux下如何配置lvs高可用集群
- 【翻译】基于 Create React App路由4.0的异步组件加载(Code Splitting)
- 解决python2.7 UnicodeDecodeError和UnicodeEncodeError问题
- java icon动态变换,以编程方式自动更改ImageIcon [Java]
- Seata 的AT模式需求实战_04
- linux内存管理(十二)-直接页面回收
- caffe的python接口学习(2):生成solver文件
- 中医为什么会发明比血管更玄乎的经脉呢
- Hive 3.1.2 国内镜像下载地址
- 智能硬件无线通信协议的那些事儿(一)
- 安卓手机5个好用的思维导图软件
- 从SVN检出项目下载到本地后出现错误
- Outlook读取奇妙清单Wunderlist日历失败的解决办法
- h5自定义微信分享链接
- 使用Unity编写传统ARPG游戏的人物操作方式
- 视觉-相机图像质量测试
- html页面字体飞入飞出特效,JS网页特效:星空飞入效果
- 设计模式总结--------调停者模式
- JAVA配置多源数据库
热门文章
- python中import问题
- floyd求最小环 模板
- Android 推送通知指南(转载)
- 进程已不存在,但端口仍被占用
- VC++2012编程演练数据结构《12》二叉排序树
- fabric node enrollAdmin.js 报错SyntaxError: Unexpected token function at createScript (vm.js:56:10)
- 根据中文修改英文翻译,重新生成英文翻译文件(保证原有文件的顺序不变)
- Spring中yml多环境配置
- android.os文件,使用android.os.memoryfile的文件IO
- python 服务器框架_python 服务器框架