具体描述
本书是《Spring Boot 编程思想》的核心篇,开篇总览Spring Boot核心特性,接着讨论自动装配(Auto-Configuration)与SpringApplication。《Spring Boot编程思想(核心篇)》的讨论以Spring Boot为中心,议题发散至Spring技术栈、JSR及Java。希望透过全局的视角,帮助读者了解Spring Boot变迁的历程;经过多方的比较,帮助读者理解Spring Boot特性的原理;整合标准的规范,帮助读者掌握Spring Boot设计的哲学。
《Spring Boot编程思想(核心篇)》适合对Spring Boot感兴趣的读者阅读。
作者简介
小马哥(mercyblitz)
“我是谁?”是一个不错的哲学问题。
在“江湖”上,大家亲切地称我为“小马哥”,我做公益,也做生意;在社区中,我又以 mercyblitz的身份出没在众多开源项目中,“mercy”符合我的性格,“blitz”说明我的风格。
承蒙错爱,不少朋友对我过去的分享称赞有加,然而“千夫诺诺,不如一士谔谔”,时常又让自己陷入一种迷思,到底是平台的帮衬,还是个人的确禁得起考验?于是我选择隐匿真名,希望能够听到更真实的声音。尽管在互联网时代,个人信息几乎无处遁形。无可讳言,我所属的公司及职业头衔必然会形成“舞台效应”,如此一来,不但违背了写书的初衷,而且模糊了讨论的焦点。所以,本书既不会出现这些信息,又不会搞“个人崇拜”。它的价值应该体现在知识的传播上,至于它的优劣则由诸君来评判。
个人简介
Apache Dubbo PMC、Spring Cloud Alibaba项目架构师。目前主要负责集团中间件开源项目、微服务技术实施、架构演进、基础设施构建等工作。通过了SUN Java(SCJP、SCWCD、SCBCD)及Oracle OCA等认证。
目录信息
第1章 初览Spring Boot 2
1.1 Spring Framework时代 2
1.2 Spring Boot简介 3
1.3 Spring Boot的特性 5
1.4 准备运行环境 5
1.4.1 装配JDK 8 5
1.4.2 装配Maven 6
1.4.3 装配IDE(集成开发环境) 8
第2章 理解独立的Spring应用 9
2.1 创建Spring Boot应用 10
2.1.1 命令行方式创建Spring Boot应用 11
2.1.2 图形化界面创建Spring Boot应用 21
2.1.3 创建Spring Boot应用可执行JAR 29
2.2 运行Spring Boot应用 31
2.2.1 执行Spring Boot应用可执行JAR 32
2.2.2 Spring Boot应用可执行JAR资源结构 32
2.2.3 FAT JAR和WAR执行模块——spring-boot-loader 36
2.2.4 JarLauncher的实现原理 40
第3章 理解固化的Maven依赖 58
3.1 spring-boot-starter-parent与spring-boot-dependencies简介 58
3.2 理解spring-boot-starter-parent与spring-boot- dependencies 61
第4章 理解嵌入式Web容器 70
4.1 嵌入式Servlet Web容器 71
4.1.1 Tomcat作为嵌入式Servlet Web容器 72
4.1.2 Jetty作为嵌入式Servlet Web容器 77
4.1.3 Undertow作为嵌入式Servlet Web容器 80
4.2 嵌入式Reactive Web容器 82
4.2.1 UndertowServletWebServer作为嵌入式Reactive Web容器 82
4.2.2 UndertowWebServer作为嵌入式Reactive Web容器 84
4.2.3 WebServerInitializedEvent 91
4.2.4 Jetty作为嵌入式Reactive Web容器 93
4.2.5 Tomcat作为嵌入式Reactive Web容器 94
第5章 理解自动装配 96
5.1 理解@SpringBootApplication注解语义 97
5.2 @SpringBootApplication属性别名 103
5.3 @SpringBootApplication标注非引导类 107
5.4 @EnableAutoConfiguration激活自动装配 108
5.5 @SpringBootApplication“继承”@Configuration CGLIB提升特性 110
5.6 理解自动配置机制 112
5.7 创建自动配置类 116
第6章 理解Production- Ready特性 119
6.1 理解Production-Ready一般性定义 120
6.2 理解Spring Boot Actuator 123
6.3 Spring Boot Actuator Endpoints 124
6.4 理解“外部化配置 129
6.5 理解“规约大于配置” 132
6.6 小马哥有话说 134
6.6.1 Spring Boot作为微服务中间件 134
6.6.2 Spring Boot作为Spring Cloud基础设施 135
6.7 下一站:走向自动装配 135
第2部分 走向自动装配
第7章 走向注解驱动编程(Annotation-Driven) 138
7.1 注解驱动发展史 138
7.1.1 注解驱动启蒙时代:Spring Framework 1.x 138
7.1.2 注解驱动过渡时代:Spring Framework 2.x 139
7.1.3 注解驱动黄金时代:Spring Framework 3.x 142
7.1.4 注解驱动完善时代:Spring Framework 4.x 146
7.1.5 注解驱动当下时代:Spring Framework 5.x 151
7.2 Spring核心注解场景分类 152
7.3 Spring注解编程模型 154
7.3.1 元注解(Meta-Annotations) 154
7.3.2 Spring模式注解(Stereotype Annotations) 155
7.3.3 Spring组合注解(Composed Annotations) 187
7.3.4 Spring注解属性别名和覆盖(Attribute Aliases and Overrides) 195
第8章 Spring注解驱动设计模式 225
8.1 Spring @Enable模块驱动 225
8.1.1 理解@Enable模块驱动 225
8.1.2 自定义@Enable模块驱动 226
8.1.3 @Enable模块驱动原理 236
8.2 Spring Web自动装配 250
8.2.1 理解Web自动装配 250
8.2.2 自定义Web自动装配 254
8.2.3 Web自动装配原理 258
8.3 Spring条件装配 270
8.3.1 理解配置条件装配 271
8.3.2 自定义配置条件装配 274
8.3.3 配置条件装配原理 277
第9章 Spring Boot自动装配 292
9.1 理解Spring Boot自动装配 295
9.1.1 理解@EnableAutoConfiguration 296
9.1.2 优雅地替换自动装配 298
9.1.3 失效自动装配 298
9.2 Spring Boot自动装配原理 299
9.2.1 @EnableAutoConfiguration读取候选装配组件 301
9.2.2 @EnableAutoConfiguration排除自动装配组件 305
9.2.3 @EnableAutoConfiguration过滤自动装配组件 307
9.2.4 @EnableAutoConfiguration自动装配事件 313
9.2.5 @EnableAutoConfiguration自动装配生命周期 317
9.2.6 @EnableAutoConfiguration排序自动装配组件 324
9.2.7 @EnableAutoConfiguration自动装配BasePackages 332
9.3 自定义Spring Boot自动装配 337
9.3.1 自动装配Class命名的潜规则 338
9.3.2 自动装配package命名的潜规则 338
9.3.3 自定义Spring Boot Starter 340
9.4 Spring Boot条件化自动装配 346
9.4.1 Class条件注解 347
9.4.2 Bean条件注解 358
9.4.3 属性条件注解 370
9.4.4 Resource条件注解 376
9.4.5 Web应用条件注解 391
9.4.6 Spring表达式条件注解 397
9.5 小马哥有话说 401
9.6 下一站:理解SpringApplication 402
第3部分 理解SpringApplication
第10章 SpringApplication初始化阶段 405
10.1 SpringApplication构造阶段 405
10.1.1 理解SpringApplication主配置类 406
10.1.2 SpringApplication的构造过程 410
10.1.3 推断Web应用类型 411
10.1.4 加载Spring应用上下文初始化器(ApplicationContextInitializer) 412
10.1.5 加载Spring应用事件监听器(ApplicationListener) 415
10.1.6 推断应用引导类 416
10.2 SpringApplication配置阶段 417
10.2.1 自定义SpringApplication 417
10.2.2 调整SpringApplication设置 417
10.2.3 增加SpringApplication配置源 420
10.2.4 调整Spring Boot外部化配置 423
第11章 SpringApplication运行阶段 425
11.1 SpringApplication准备阶段 425
11.1.1 理解SpringApplicationRunListeners 426
11.1.2 理解SpringApplicationRunListener 428
11.1.3 理解Spring Boot事件 431
11.1.4 理解Spring事件/监听机制 432
11.1.5 理解Spring Boot事件/监听机制 492
11.1.6 装配ApplicationArguments 509
11.1.7 准备ConfigurableEnvironment 512
11.1.8 创建Spring应用上下文(ConfigurableApplicationContext) 512
11.1.9 Spring应用上下文运行前准备 516
11.2 Spring应用上下文启动阶段 537
11.3 Spring应用上下文启动后阶段 539
11.3.1 afterRefresh方法签名的变化 540
11.3.2 afterRefresh方法语义的变化 541
11.3.3 Spring Boot事件ApplicationStartedEvent语义的变化 543
11.3.4 执行CommandLineRunner和ApplicationRunner 548
第12章 SpringApplication结束阶段 550
12.1 SpringApplication正常结束 550
12.2 SpringApplication异常结束 555
12.2.1 Spring Boot异常处理 556
12.2.2 错误分析报告器——FailureAnalysisReporter 562
12.2.3 自定义实现FailureAnalyzer和FailureAnalysisReporter 564
12.2.4 Spring Boot 2.0重构handleRunFailure和reportFailure方法 566
12.2.5 Spring Boot 2.0的SpringBootExceptionReporter接口 567
第13章 Spring Boot应用退出 571
13.1 Spring Boot应用正常退出 572
13.1.1 ExitCodeGenerator Bean生成退出码 572
13.1.2 ExitCodeGenerator Bean退出码使用场景 576
13.2 Spring Boot应用异常退出 580
13.2.1 ExitCodeGenerator异常使用场景 582
13.2.2 ExitCodeExceptionMapper Bean映射异常与退出码 587
13.2.3 退出码用于SpringApplication异常结束 589
13.3 小马哥有话说 594
13.4 下一站:运维篇 596
· · · · · · (收起)
读后感
人生第一次写评价。以下均为个人看法。 本人属于 Java 行业的初学者,更是 Spring Boot 方面的菜鸡(19年才开始用 Spring Boot),通过用 Spring Boot 才认识的了小马哥。 有点出乎我的意料,截止 2020.04.11 这本书的评分才 6.6,我看了下评论,主要有这么槽点: 1.不适合初学...
本书序言中说的,和后面的内容反差太大,内容大量粘贴的官方文档,逻辑混乱,铺垫了一堆,不知道要讲啥。书名不该用编程思想,会给别人造成误解,买了以后发现有点被欺骗的感觉。建议买入前先到网上看看大致的内容,是否合自己的胃口,不要被书名和序言所迷惑。。。。。。。。...
人生第一次写评价。以下均为个人看法。 本人属于 Java 行业的初学者,更是 Spring Boot 方面的菜鸡(19年才开始用 Spring Boot),通过用 Spring Boot 才认识的了小马哥。 有点出乎我的意料,截止 2020.04.11 这本书的评分才 6.6,我看了下评论,主要有这么槽点: 1.不适合初学...
本书序言中说的,和后面的内容反差太大,内容大量粘贴的官方文档,逻辑混乱,铺垫了一堆,不知道要讲啥。书名不该用编程思想,会给别人造成误解,买了以后发现有点被欺骗的感觉。建议买入前先到网上看看大致的内容,是否合自己的胃口,不要被书名和序言所迷惑。。。。。。。。...
本书序言中说的,和后面的内容反差太大,内容大量粘贴的官方文档,逻辑混乱,铺垫了一堆,不知道要讲啥。书名不该用编程思想,会给别人造成误解,买了以后发现有点被欺骗的感觉。建议买入前先到网上看看大致的内容,是否合自己的胃口,不要被书名和序言所迷惑。。。。。。。。...
用户评价
阅读体验上,这本书的行文风格偏向于**学术论文的严谨性**,语言组织一丝不苟,力求精准无歧义。这固然保证了信息的准确度,却也无形中增加了阅读的认知负荷。我个人更偏爱那种带着“匠人精神”和“踩坑经验”的叙述方式,比如作者能以过来人的口吻,分享在**OAuth 2.0 认证授权流程**中遇到的特定版本的兼容性问题,以及如何通过自定义`TokenStore`来适配特定的持久化方案。但本书在这类“江湖经验”的分享上显得相当克制。它更多地是在描述Spring Security模块的官方设计意图,而非实际项目中遇到的各种“奇奇怪怪”的配置冲突。例如,在涉及**云原生部署和容器化**时,书中对`ConfigMap`和`Secret`的注入机制讲解得非常透彻,但对于如何结合**Kubernetes的Liveness/Readiness Probes**来确保服务的健康状态检查,以及如何配置Spring Boot Actuator以适应这些探针的要求,这些关键的DevOps集成点,却未见深入的探讨。这使得全书的视野似乎停在了应用内部,未能完全扩展到现代微服务架构的整体生态。
这本关于Spring Boot的读物,从其厚重的篇幅来看,无疑是想在浩瀚的微服务海洋中竖起一座灯塔。然而,当我深入探索其章节布局时,却发现它似乎更侧重于对框架底层设计哲学的抽象探讨,而非我们日常开发中最关切的那些“落地生根”的实操技巧。比如,它花了大量的笔墨去剖析**Spring IoC容器在初始化阶段的生命周期管理**,特别是如何处理Bean的实例化、依赖注入以及后置处理器(`BeanPostProcessor`)的介入点。这种深度剖析固然体现了作者对技术原理的深刻理解,但对于一个急需快速搭建稳定服务的开发者而言,可能略显“曲高和寡”。我期待看到更多关于如何优雅地处理**分布式事务**,或者针对**高并发场景下性能调优**的实战案例,例如如何利用AOP进行细粒度的性能监控和熔断策略配置。遗憾的是,在这些关键的工程实践领域,这本书的叙述显得有些意犹未尽,更像是在构建一个理论的“骨架”,而缺少了填补血肉的“代码示例”和“陷阱警示”。如果它能更平衡理论深度与工程实用的比重,让读者在理解“为什么”的同时,也能清晰地知道“怎么做”,那它将更具指导价值。
我对技术书籍的价值判断,很大程度上取决于它在**特定技术栈版本迭代**中的时效性和前瞻性。坦白说,Spring Boot社区的活跃度极高,新特性层出不穷,尤其是在响应式编程(WebFlux)和函数式编程范式日益普及的今天,我希望能从这本书中看到更前沿的视角。我期待它能详细剖析**Reactor 编程模型**在处理I/O密集型任务时的性能优势与心智模型转换,或者提供一套基于WebFlux的**事件驱动架构**的完整实现蓝图。然而,这本书的篇幅似乎更专注于对经典MVC模式下各种注解(如`@Controller`、`@Service`)的原理性挖掘,对于WebFlux的响应式数据流处理、背压(Backpressure)的机制,介绍得相对简略,更像是“点到为止”而非“深入骨髓”。在数据访问层面,对于**R2DBC(响应式数据库访问)**的集成案例也显得比较保守,缺乏将其与响应式Web层无缝衔接的完整代码演示。这让这本书在技术前沿探索这一维度上,少了一份“敢为人先”的锐气。
从项目维护和故障排查的角度来看,一个优秀的参考书应该能指导开发者如何快速诊断线上问题。在这一点上,我对这本书关于**运行时诊断工具**的覆盖广度感到有些意犹未尽。Spring Boot Actuator是解决生产问题的利器,我希望看到书中能提供更丰富的场景化应用,比如如何利用`/threaddump`来分析死锁,如何通过`/metrics`端点定制JVM、系统层面的监控指标,并将其无缝接入Prometheus等外部监控系统。更进一步说,对于**分布式追踪系统(如Zipkin或Sleuth/Micrometer Tracing)**的集成和配置,书中给出的案例似乎过于基础,未能充分展示如何追踪跨服务的调用链,尤其是在处理异步调用或消息队列(如Kafka/RabbitMQ)时的上下文传播问题。一个成熟的工程实践,必然要求开发者具备构建可观测性的能力,而本书在“观测性”这一关键支柱上的阐述,更像是理论介绍,而非实战指南,这使得它在工具链集成这一块的实用价值打了折扣。
作为一个追求代码简洁和可维护性的开发者,我非常看重框架提供给我们的“约定优于配置”的哲学,以及如何通过合理的抽象来减少样板代码。这本书确实阐述了**自动配置(AutoConfiguration)**的原理,解释了`@Conditional`注解家族如何工作,这部分内容无可指摘,是理解Spring Boot魔术的关键。但是,当涉及到**自定义Starter的创建与发布**,即如何将自己的业务组件打包成一个易于分发的、具有高度内聚性的模块时,书中提供的信息量显得略微不足。构建一个企业级的共享组件,需要考虑版本兼容性、外部依赖的合理传递、以及如何设计清晰的外部化配置属性。这些都是实际架构师必须面对的问题。书中关于配置属性的讲解,更多停留在`application.properties`或`application.yml`的基础用法上,而对于如何设计**类型安全、可验证的配置Schema**,特别是结合`@ConfigurationProperties`进行更复杂的属性绑定和校验,深度略有欠缺。这种对“组件化思维”的培养,是区分普通使用者和框架设计者的重要分水岭。
不推荐初学者阅读
小马哥写的还是很细致的. 后面监听器看着有些不理解了. 其他都还好.
坚持看完了,怎么说了,像是那种博客类型流水文,内容乍一看,哇哦好全面,好有深度,但实际内容被作者搞得有点晦涩,并不是难懂,就是讲的复杂了,讲拖沓了。最受不了得是,大幅度得代码粘贴,文档粘贴,哎,真的是有点侮辱编程思想这四个字了
东西都讲到了。可惜对于初学者过于繁杂,不利于他们抓住重点,纲举目张。对于熟练开发,同样失之于繁琐。最有价值的部分在于在于章节名,方便后台开发按照章节名和开发需要,学习面试需要,查漏补缺。里面的内容么,代码贴的太多,核心思想讲的太少,不大对得起编程思想这四个字。毕竟,授人以鱼不如授人以渔!讲应用,最关键的还是要把核心的设计思想,理念,使用讲透。最好能做到,开发人员面对框架新功能,能大致猜到是怎么实现的。出现问题,大致知道出现问题的点在那些地方,这才是框架使用真正的道!代码偏多,有些鸡肋。
买书得长个心眼了