新書推薦:
《
木偶的恨意(法国悬念大师米歇尔普西悬疑新作)
》
售價:HK$
64.9
《
孤独传:一种现代情感的历史
》
售價:HK$
85.8
《
家、金钱和孩子
》
售價:HK$
64.9
《
形而上学与测量
》
售價:HK$
74.8
《
世界航母、舰载机图鉴 【日】坂本明
》
售價:HK$
74.8
《
量价关系——透视股票涨跌脉络
》
售價:HK$
74.8
《
创伤与记忆:身体体验疗法如何重塑创伤记忆 [美]彼得·莱文
》
售價:HK$
64.9
《
复原力
》
售價:HK$
75.9
編輯推薦:
本书全名为《Spring Boot编程思想(核心篇》》,以Spring Boot 2.0为讨论的主线,讨论的范围将涵盖 Spring Boot 1.x的所有版本,以及所关联的Spring Framework版本,致力于:场景分析掌握技术选型;系统学习拒绝浅尝辄止;重视规范了解发展趋势;源码解读理解设计思想;实战演练巩固学习成果。
內容簡介:
本书是《Spring Boot 编程思想》的核心篇,开篇总览Spring Boot核心特性,接着讨论自动装配(Auto-Configuration)与SpringApplication。全书的讨论以Spring Boot为中心,议题发散至Spring技术栈、JSR及Java。希望透过全局的视角,帮助读者了解Spring Boot变迁的历程;经过多方的比较,帮助读者理解Spring Boot特性的原理;整合标准的规范,帮助读者掌握Spring Boot设计的哲学。
關於作者:
小马哥(mercyblitz)是作者马昕曦的笔名。阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施、迁移等。重点关注云计算、微服务以及软件架构等领域。获得过 SUN Java(SCJP、SCWCD、SCBCD)以及 Oracle OCA 等认证。
目錄 :
第1部分总览Spring Boot
第1章初览Spring Boot2
1.1Spring Framework时代2
1.2Spring Boot简介3
1.3Spring Boot的特性5
1.4准备运行环境5
1.4.1装配JDK 85
1.4.2装配Maven6
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应用可执行JAR29
2.2运行Spring Boot应用31
2.2.1执行Spring Boot应用可执行JAR32
2.2.2Spring Boot应用可执行JAR资源结构32
2.2.3FAT JAR和WAR执行模块spring-boot-loader36
2.2.4JarLauncher的实现原理40
第3章理解固化的Maven依赖58
3.1spring-boot-starter-parent与spring-boot-dependencies简介58
3.2理解spring-boot-starter-parent与spring-boot- dependencies61
第4章理解嵌入式Web容器70
4.1嵌入式Servlet Web容器71
4.1.1Tomcat作为嵌入式Servlet Web容器72
4.1.2Jetty作为嵌入式Servlet Web容器77
4.1.3Undertow作为嵌入式Servlet Web容器80
4.2嵌入式Reactive Web容器82
4.2.1UndertowServletWebServer作为嵌入式Reactive Web容器82
4.2.2UndertowWebServer作为嵌入式Reactive Web容器84
4.2.3WebServerInitializedEvent91
4.2.4Jetty作为嵌入式Reactive Web容器93
4.2.5Tomcat作为嵌入式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 Actuator123
6.3Spring Boot Actuator Endpoints124
6.4理解外部化配置129
6.5理解规约大于配置132
6.6小马哥有话说134
6.6.1Spring Boot作为微服务中间件134
6.6.2Spring Boot作为Spring Cloud基础设施135
6.7下一站:走向自动装配135
第2部分走向自动装配
第7章走向注解驱动编程(Annotation-Driven)138
7.1注解驱动发展史138
7.1.1注解驱动启蒙时代:Spring Framework 1.x138
7.1.2注解驱动过渡时代:Spring Framework 2.x139
7.1.3注解驱动黄金时代:Spring Framework 3.x142
7.1.4注解驱动完善时代:Spring Framework 4.x146
7.1.5注解驱动当下时代:Spring Framework 5.x151
7.2Spring核心注解场景分类152
7.3Spring注解编程模型154
7.3.1元注解(Meta-Annotations)154
7.3.2Spring模式注解(Stereotype Annotations)155
7.3.3Spring组合注解(Composed Annotations)187
7.3.4Spring注解属性别名和覆盖(Attribute Aliases and Overrides)195
第8章Spring注解驱动设计模式225
8.1Spring @Enable模块驱动225
8.1.1理解@Enable模块驱动225
8.1.2自定义@Enable模块驱动226
8.1.3@Enable模块驱动原理236
8.2Spring Web自动装配250
8.2.1理解Web自动装配250
8.2.2自定义Web自动装配254
8.2.3Web自动装配原理258
8.3Spring条件装配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理解@EnableAutoConfiguration296
9.1.2优雅地替换自动装配298
9.1.3失效自动装配298
9.2Spring 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自动装配BasePackages332
9.3自定义Spring Boot自动装配337
9.3.1自动装配Class命名的潜规则338
9.3.2自动装配package命名的潜规则338
9.3.3自定义Spring Boot Starter340
9.4Spring Boot条件化自动装配346
9.4.1Class条件注解347
9.4.2Bean条件注解358
9.4.3属性条件注解370
9.4.4Resource条件注解376
9.4.5Web应用条件注解391
9.4.6Spring表达式条件注解397
9.5小马哥有话说401
9.6下一站:理解SpringApplication402
第3部分理解SpringApplication
第10章SpringApplication初始化阶段405
10.1SpringApplication构造阶段405
10.1.1理解SpringApplication主配置类406
10.1.2SpringApplication的构造过程410
10.1.3推断Web应用类型411
10.1.4加载Spring应用上下文初始化器(ApplicationContextInitializer)412
10.1.5加载Spring应用事件监听器(ApplicationListener)415
10.1.6推断应用引导类416
10.2SpringApplication配置阶段417
10.2.1自定义SpringApplication417
10.2.2调整SpringApplication设置417
10.2.3增加SpringApplication配置源420
10.2.4调整Spring Boot外部化配置423
第11章SpringApplication运行阶段425
11.1SpringApplication准备阶段425
11.1.1理解SpringApplicationRunListeners426
11.1.2理解SpringApplicationRunListener428
11.1.3理解Spring Boot事件431
11.1.4理解Spring事件监听机制432
11.1.5理解Spring Boot事件监听机制492
11.1.6装配ApplicationArguments509
11.1.7准备ConfigurableEnvironment512
11.1.8创建Spring应用上下文(ConfigurableApplicationContext)512
11.1.9Spring应用上下文运行前准备516
11.2Spring应用上下文启动阶段537
11.3Spring应用上下文启动后阶段539
11.3.1afterRefresh方法签名的变化540
11.3.2afterRefresh方法语义的变化541
11.3.3Spring Boot事件ApplicationStartedEvent语义的变化543
11.3.4执行CommandLineRunner和ApplicationRunner548
第12章SpringApplication结束阶段550
12.1SpringApplication正常结束550
12.2SpringApplication异常结束555
12.2.1Spring Boot异常处理556
12.2.2错误分析报告器FailureAnalysisReporter562
12.2.3自定义实现FailureAnalyzer和FailureAnalysisReporter564
12.2.4Spring Boot 2.0重构handleRunFailure和reportFailure方法566
12.2.5Spring Boot 2.0的SpringBootExceptionReporter接口567
第13章Spring Boot应用退出571
13.1Spring Boot应用正常退出572
13.1.1ExitCodeGenerator Bean生成退出码572
13.1.2ExitCodeGenerator Bean退出码使用场景576
13.2Spring Boot应用异常退出580
13.2.1ExitCodeGenerator异常使用场景582
13.2.2ExitCodeExceptionMapper Bean映射异常与退出码587
13.2.3退出码用于SpringApplication异常结束589
13.3小马哥有话说594
13.4下一站:运维篇
內容試閱 :
非常感谢您阅读本书,在成长道路上,我们从此不再孤单。大约在三年前,我有幸参与全集团微服务架构的演进及基础设施的构建,在此期间痛苦和受益并存。二○一六年十二月,经朋友引荐,作为SFDC2016杭州开发者大会的嘉宾,进行了一场名为微服务实践之路的演讲,从此正式开始了我的微服务布道师之路。次年三月,segmentfault讲堂栏目上线,我再次受邀,作为Java讲师。同年六月二日,Java微服务实践系列讲座正式直播,我主讲SpringBoot和SpringCloud。无独有偶,当月正好我工作满十周年,也萌生了著书的意向,计划写一本关于SpringBoot微服务开发实践的书籍,希望借此机会与诸君分享我的微服务实践经验。然而,随后的变故将此念头变为了现实。当月九日上午,正值当差,父亲传来一通电话,告知外婆于八点左右过世,听此噩耗,悲从中来,不可断绝。即刻带着身怀六甲的妻子,启程回湘。外婆一直陪伴着我的成长,直到我远赴杭州求职,才分隔两地。现如今祖孙二人天各一方,生死茫茫,无处话凄凉,子欲养而亲不待的痛楚莫过于此。我曾向上天祷告,愿她能安享西方极乐。若非外婆的离世,我绝对不会有坚定意志和足够勇气来完成此书,书籍的内容也不会有颠覆性的变化,讨论的议题从过去的SpringBoot微服务开发实践逐渐转变为SpringBoot编程思想。希望竭尽所能,将技术积累、学习方法、实战经验,以及所思所想和盘托出。每当自己午夜梦回,脑海中浮现外婆的容貌时,总会潸然泪下,所有的思想动摇和行为慵懒立即烟消云散。外婆是虔诚的佛教徒,平日乐善好施。从小耳濡目染的我也尽一点绵薄之力,将书籍五成以上的稿费作为公益基金,支持贫困地区的青少年教育,并且不定期地公开账目信息,供广大读者监督。这或许杯水车薪,但仍希望他们能够感到一丝温暖。祸兮福所倚,福兮祸所伏,生死轮回,自然之理。外婆去世后的两个月,我的儿子降临人间。作为一名新晋的父亲,自然会以更高的标准来要求自己,对书籍的质量同样趋于严苛,将早期已完成的部分付之一炬,推倒重来,内容篇幅剧增。作为我儿的表率,著书只是立言的开始,捐赠作为立德的发端,而立行则需身体力行,持之以恒。或许著作等身是一种不错的选择,然而现代科技的进步,尤其是文字载体的革新,要做到这一点,难度实在不小。不过,为者常成,行者常至,实现从小马哥到马三立先生的华丽转身并非遥不可及。已故南京大学历史系教授高华先生曾引述凯斯詹京斯的观点,历史乃论述过去,但绝不等于过去。既然是论述,那么或多或少会存在偏差,不但受限于论述者的知识、能力及记忆等主观因素,而且取决于当时的时空环境。为了遵照原著,在功能特性的介绍上,本书将引述官方文档的英文原文,并做出适当的解释。由于文档的编写者或许不是代码的实现者,即使是实现者本人,也难免会站在自己的立场和高度,抑或章节安排及文字组织等诸多因素影响阅读和理解。因此,针对官方文档语焉不详的部分,本书将补充说明;对其错误的结论,将加以修正。由于本人能力和水平的局限,不敢妄言理解格物致知的奥义,难免有主观臆断和谬论之处,且仅一家之言,供诸君参考,切莫将此奉为圭臬,书云亦云,不假思索。老子有言,上士闻道,勤而行之,希望读者能学以致用,若能在实践中激发出创新的灵感,善莫大焉。最后,借此机会,由衷地感谢我的太太,没有她背后默默地付出,我不会有如此多的精力投入,更无法专注写作。同时,向陈晓猛编辑致敬,他是一位谦谦君子,极富耐心,在书籍编写的过程中,给予我不少的帮助和鼓励。再次向各位朋友送上我诚挚的歉意,由于个人的原因,使得书籍出版时间一再跳票。小马哥公元二○一九年一月于杭州