`
eric_weitm
  • 浏览: 235595 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring4系列二 spring boot 解析

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics