spring boot深入及启动原理探究
围绕spring boot 的优点,本文我们来探究一下spring boot具体是如何实现这些特性的。
- 自动配置:针对很多Spring应用程序和常见的应用功能,Spring boot能自动提供相关配置;
- 起步依赖:告诉Spring boot需要什么功能,它就能引入需要的依赖库;
- Actuator:让你能够深入运行中的Spring Boot应用程序,一探Spring boot程序的内部信息;
- 命令行界面:这是Spring Boot的可选特性,主要针对Groovy语言使用。
@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 {
/**
* Exclude specific auto-configuration classes such that they will never be
applied.
* @return the classes to exclude
*/
@AliasFor(annotation = EnableAutoConfiguration.class)
... ... ...
@SpringBootApplication是一个复合注解,其中关键@EnableAutoConfiguration,就是开启自动配置的意思
@SpringBootApplication包括三个注解,功能如下:@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
@SpringBootConfiguration(内部为@Configuration):被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境
@ComponentScan:组件扫描,可自动发现和装配Bean,默认扫描SpringApplication的run方法里的Booter.class所在的包路径下文件,所以最好将该启动类放到根包路径下.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};
@Import导入的AutoConfigurationImportSelector的selectImports()方法通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包。spring-boot-autoconfigure-x.x.x.x.jar里就有一个这样的spring.factories文件。
@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。
@EnableConfigurationProperties(ServerProperties.class) 代表加载ServerProperties服务器配置属性类
prefix = “server” 表示SpringBoot配置文件中的前缀,@ConfigurationProperties会将配置文件中以server开始的属性映射到该类
Spring Boot自动化配置的Bean提供了300多个属性,用于调整设置,只要在环境变量、Java系统属性、JNDI、命令行或者属性文件里面进行指定就可以了。
server.port 服务器的HTTP端口
spring.datasource.url 数据库驱动路径
spring.datasource.username 用户名
spring.datasource.password 密码
mybatis-spring-boot-starter、spring-boot-starter-web等组件的META-INF文件下均含有spring.factories文件,自动配置模块中,SpringFactoriesLoader收集到文件中的类全名并返回一个类全名的数组,返回的类全名通过反射被实例化,就形成了具体的工厂实例,工厂实例来生成组件具体需要的bean。
spring-boot-starter-parent -> spring-boot-starter-dependencies
Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。
命令行模式:安装Spring Boot CLI工具包
原图:https://www.processon.com/view/link/59812124e4b0de2518b32b6e
流程:配置环境(environment)、事件监听(listeners)、应用上下文(applicationContext),并基于以上条件,在容器中开始实例化我们需要的Bean
https://www.cnblogs.com/trgl/p/7353782.html
1.创建了应用的监听器SpringApplicationRunListeners并开始监听
2.加载SpringBoot配置环境(ConfigurableEnvironment)
3.配置环境(Environment)加入到监听器对象中(SpringApplicationRunListeners)
4.创建run方法的返回对象:ConfigurableApplicationContext(应用配置上下文)
相关文章:

spring boot深入及启动原理探究
围绕spring boot 的优点,本文我们来探究一下spring boot具体是如何实现这些特性的。 自动配置:针对很多Spring应用程序和常见的应用功能,Spring boot能自动提供相关配置;起步依赖:告诉Spring boot需要什么功能,它就能引…...

接口测试那些事儿
什么是接口? 首先,在讲接口测试之前,我们先要搞清楚接口类型的概念。 接口:可能是系统与系统(包括服务与服务)之间的调用,像A系统(服务)给B系统(服务&#x…...

myeclipse的一些使用技巧
一直都是看别人的博客,学习别人的心得, 但是软件行业涉及的技术太多,学过的很多东西都忘了,今天我也弄个博客玩玩, 把我所学的,工作中遇到的问题也做做记录,方便自己,也方便他人&…...

mysql重置Root密码
方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

JfreeChart柱状图饼图
JfreeChart画出柱状图饼图的代码片段及详细的注释,附件为JfreeChart中文API一览表,和生成的柱状图,饼图图片 import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.C…...

自动装配的底层实现
public void autowire(Object o, Map<String, String> map) throws Exception { // 获得map 所有key Set<String> keys map.keySet(); // 获得Object中所有属性 // 获得Class对象 Class c o.getClass(); // 获得…...

java基础需要强化之关键
多线程 进程和线程的区别 ProccessBuilder 和 Runtime.getRuntime().exec java中两种线程的创建方式 extends Thread和 implements Runnable 线程的生命周期:线程创建、Runnable、Running、Blocked、dead sleep、yield、join 等方法 线程打断 interrupt 什么是守护线…...

MD5加密算法详解
注:MD5不是绝对的安全,有俩md5解决 /******************************************************************************* * keyBean 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的keyBean message-digest * 算法。 *****************…...

javaSE之反射
什么是反射? 简单的说:剖析java类中的各个组成部分,映射成一个个java对象。 在java.lang.reflect中。 反射用在哪? 多用于框架和组件,利用反射技术写出复用性高的通用程序 我只列出了反射中几个常用的API 类 Class 构…...

HTTP协议详解
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作…...

javaSE之动态代理
动态代理技术: 使程序更加灵活,可以在代理java类的时候加入一些功能。 很类似过滤器,区别: 过滤器是自己编写西横须实现的功能 动态代理是JVM内部机制 实现步骤: 1.真是业务对象(被代理对象) 2…...

javaSE之类加载器
类加载器,说白了就是加载类的呵呵 .类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象 .当JVM启动时,会形成由三个类加载器组成的初始类加载器层次…...

java的几种对象(PO,VO,DAO,BO,POJO)解释
一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 二、VO:value object值对象。通常用于业务层之间的数据传递࿰…...

webservice学习记录笔记(一)
一、先理解什么是服务 现在的应用程序变得越来越复杂,甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了。 写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层的应用程序,甚至认为,这就是数…...

Java中堆内存和栈内存详解
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后&am…...

Hibernate 主键生成策略
<generator>:主键生成策略 increment:递增,hibernate自动产生主键.max(id) ,采用带走1算法,多进程/集群环境下不推荐使用. identity:设置表主键是自增字段,映射文件采用该策略,依赖底层库, auto_increment identity 适用于MySQL、DB2、MS SQL Server,…...

flex 计算指定日期是本年度第几周
/** * 计算指定日期是本年度第几周 *传日年月日,返回number */ private function weekOfYear(yyyy:Number,mm:Number,dd:Number):Number{ var myDate:Date new Date(yyyy, mm - 1, dd); var startDate:Date new Date(yyyy,0,1); v…...

flex获得指定时间段一共多少天
/** * 获得某个时间段 共有多少天 * param start 开始时间 * param end 结束时间 * return * */ public static function getTimeDays( start:Date , end:Date , type:int0):Number { var _re:int 0 ; if(start && end) { var _str:Numbe…...

flex计算某一日期的周开始和结束日期
/** * 计算 某个日期所在周的开始日期和结束日期 * param value * param isZero 0 当前时间 , 1 日期时间设置为0 , * return Array[0] 周一的日期 Array[1] 周日的日期 * */ public static function getCurrentDayFE(value:Date, isZero:int1):Array…...

flex时间便秒,秒变时间
/** * 秒变时间 * return * */ public static function secondToTime(second:int):Array { var hh:intint(second / 3600); var mm:intint((second % 3600) / 60); var ss:intsecond % 60; return [hh, mm, ss]; } /** * 时间变秒 * param hh 小时 * …...

flex勾选,自动刷新
mxml: <s:CheckBox label"刷新" buttonMode"true" id "frc" selected "{model.autoFresh}" change "{model.startAutoQuery(frc.selected)}"/> <s:Label text"间隔"/> &…...

flex 下拉框验证组件
//继承验证 public class ObjectNullValidator extends Validator { public function ObjectNullValidator() { super(); requiredFieldError "必须填写" ; } private var _invalidCode:String "222"; public static function validateS…...

flex dataGrid组件全选,反选,并获取选中值,代码详解
//1 组建重写 package hxht.comps.datagrid{ import flash.display.DisplayObject; import flash.events.Event; import flash.events.MouseEvent; import mx.collections.ArrayCollection; import mx.collections.IList; import mx.events.DynamicEvent; import spark.comp…...

flex blaze+java通信的例子
步骤: 1:建立java web程序 2: 下载blazeDS包,解压后将WEB-INF下的 flex,lib,web.xml复制到java程序的WEB-INF下 3:打开web.xml文件将以下代码的注释去掉,并修改 <param-value>…...

flex 事件机制详解
事件机制的工作流程 1:关于事件流 当一个事件发生,必然存在一个派发事件的对象,这里称之为目标对象。 当事件发生后flashPlayer生成一个携带数据的对象,然后检查目标对象是否处于显示层中,如果是则遍历从根容器一直到目…...

flex data services
本文来自:http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html 一 FDS相关概念 FDS全称Flex Data Services(现在Adobe将其改名为LiveCycle Data Services),是运行在服务器端的 java程序.它能够运行在大部分的java应用服务器上,包括JRun, JBos…...

flex验证座机,手机的框架
import mx.utils.StringUtil; import mx.validators.ValidationResult; import mx.validators.Validator; public class PhoneValidator extends Validator { public function PhoneValidator() { super(); } private var _phoneInvalid:String"正确格式(010-865…...

actionScript 数组去重
public function unique(array:Array):Array { for (var i:int0; i < array.length; i) { for (var j:inti 1; j < array.length; j) { //注意 if (array[i] array[j]) { array.splice(j, 1); j--; } } } return array…...

面向对象编程的弊端
英文原文:What’s Wrong with OOP and FP 我不理解为什么人们会对面向对象编程和函数式编程做无休无止的争论。就好象这类问题已经超越了人类智力极限,所以你可以几个世纪的这样讨论下去。经过这些年对编程语言的研究,我已经清楚的看到了问题…...

产品之增删查改显算传
原文:http://qingsong.sinaapp.com/?p422 不知道大家在做产品设计时有时候会不会和我一样,一个很简单的功能却给忽略了,或者一个很常规的应用点视而不见,等提交技术开发后才发现少了一点给开发带来了很多困扰,于是不得…...

到底什么是互联网思维
本文转字http://www.managershare.com/2014/04/28/internet-thinking-magic-power/课前秀:三个段子 第一个段子:有一个毫无餐饮行业经验的人,他开了一家餐馆,菜品只有12道,在北京只有两家分店;仅两个月时间…...

产品战略与战术之行业分析
产品的战略和战术之行业分析1确定行业规模行业的规模大小某种程度上讲他决定了产品能够有多少的盈利价值和体量互联网是一个强者通吃的行业第一名很舒服第二名能混第三名就很悲催了这一点和传统行业区别相当大,所以在做行业规模预测的时候需要我们仔细评估行业里…...

产品战略战术之预测行业发展趋势
1、根据行业历史预测行业发展趋势移动互联网发展之路从基础性服务面向用户(工具类,单体服务类)面向应用(统计学,关高分享,渠道投送,流量导入)到媒体社区类传统互联网迁移(…...

互联网产品与需求一 获取需求的方法
一、行业调研分析报告 1中国移动互联网用户调查数据2列举一些常用的行业数据分析艾瑞网:http://www.iresearch.cn/199IT数据(中文互联网数据咨询中心):http://www.199it.com/量子恒定(电商数据分析):http://www.lianezing.com/网站分析在中国:http://w…...

互联网产品与需求二 评估需求
需求分析之评估需求 一.KANO模型 五个用户需求类型1.必备型需求必备型需求是用户认为产品“必须有”的属性或者功能当其特性不充足(不满足用户需求)时,用户很不满意当其特性充足(满足用户需求)时,无所谓满意…...

互联网产品与需求三 需求优先级定义
需求优先级定义即便是已经少选评估出来的需求,很多时候量也是非常大的,而哪些该做,哪些不该做,很多时候我们会遇到:Boss拍脑袋要这么做自己拍脑袋要这么做顾此失彼,左顾右盼其实,在产品不同阶段…...