1、基本概念
Environment 系统环境变量、jvm环境变量、命令行参数等构成的环境
启动时可以添加输入选项 如 --foo=bar --foo=baz
context bean所在的真正的执行上下文环境
Archive boot抽象出来的统一访问资源的层
url的例子 jar:file:/tmp/target/demo-0.0.1-SNAPSHOT.jar!/lib/aopalliance-1.0.jar
fat jar的目录结构:
BOOT-INF/classes/ 自己写的代码
BOOT-INF/lib/依赖的库
META-INF元数据
org/springframework/boot/loader boot的加载代码
2、loader 启动流程 org.springframework.boot.loader.JarLauncher
spring boot是将所有的东西打包成一个自包含的jar,所以其流程和一般的java应用有少许差别。
1》LaunchedURLClassLoader
加载所有需要的jar、class、资源等(支持jar的嵌套)
2》启动新线程执行main class的main方法
整个过程可以认为在原来的Main入口之前,进行了hack
3、web app的启动
1》deduceWebEnvironment
2》创建EmbeddedServletContainer
3》创建相应的servlet、jsp等
4、访问html、css、js、模板等资源的方式
通过Classloader提供的访问classpath resource的能力来实现
1》index.html 放入src/main/resources/static
在webmvc中会创建这个controller
2》ThymeleafProperties的默认目录设置
String DEFAULT_PREFIX = "classpath:/templates/"
3》jsp的目录 spring.view.prefix: /WEB-INF/jsp/
5、配置方法 命令行或配置文件
1> 激活不同profile java -jar *.jar --spring.profiles.active=dev
2>application.yml 放入src/main/java目录下
3>spring boot中默认会加载 classpath:/,classpath:/config
4> 直接引用 @Value(“${xxx}”)
5》映射整个对象 @ConfigurationProperties
在spring Boot入口类加上@EnableConfigurationProperties
6》常用配置
src/main/resources/static
src/main/resources/assets/js
6、自动配置的实现(引入pom自动实现bean的注入)
xml--annotation--conditionalAnno
web的自动配置 org.springframework.boot.autoconfigure.web
HttpEncodingProperties
7、依赖关系
boot-starter: boot, auto-configure, boot-starter-logging
boot-starter-web:boot-starter, boot-starter-tomcat, hibernate-validator, jackson-databind, spring-web, springweb-mvc
8、主要功能
spring-boot 支撑独立运行
boot-starter pom集成
auto-configure 自动配置和注入需要使用的bean,不需要使用方设置
spring-boot-actuator 监控和性能
9、基础逻辑
init = config arg module callback
包含关系:app, context, listener, filter, servlet
10、自定义某个starter
1) src/main/resources/META-INF/spring.factories中指定org.springframework.boot.autoconfigure.EnableAutoConfiguration
或者提供一个enableXXX的注释类
2)在xxxProperties中映射配置
3)在xxAutoConfiguration中注入bean,常见的注释包括
@Configuration
@ConditionalOnClass({ Client.class, TransportClientFactoryBean.class,NodeClientFactoryBean.class })
@EnableConfigurationProperties(ElasticsearchProperties.class)
@AutoConfigureAfter(ElasticsearchAutoConfiguration.class)
@Import(ElasticsearchRepositoriesRegistrar.class)
@Bean
@ConditionalOnMissingBean
4)如果使用的库比较复杂,需要在框架中有个集成的过程,比如
org.springframework.ldap 用于集成ldap
11、autoconfigure主要的包
org.springframework.boot.autoconfigure
spring.factories 相关处理、自动配置的前后顺序、相关注释
org.springframework.boot.autoconfigure.condition
提供各种注释,来表达注入的条件,ConditionalOnXXX