欢迎光临
免费的PDF电子书下载网站

Spring Boot开发实战-微课视频版 PDF下载

编辑推荐

本书以零基础为出发点,与大量实战开发案例、完整项目案例相结合,配以360分钟视频讲解,涵盖Spring Boot开发的基础知识与*知识点;包括Spring Boot的简介、开发起步、相关注解介绍和Web应用开发、数据库访问、数据库访问、Web服务开发、数据处理、文件应用、WebFlux开发以及示例代码等,适合Spring Boot开发的初学者(特别是在校学生)、Web应用开发者和企业级应用开发爱好者等读者;可以作为大学课程的教学用教材、自学的入门读物、开发过程的参考书。

 ;

内容简介

本书先逐步介绍Spring Boot开发的基础知识;包括Spring Boot的简介、开发起步、相关注解介绍和Web应用开发、数据库访问、数据库访问、Web服务开发、数据处理、文件应用、WebFlux开发以及示例代码。然后结合一个简单案例演示了Spring Boot开发的全过程。本书内容由浅入深,结合示例介绍各个知识点,按照开发步骤的方式组织内容;可以帮助读者更好地理解、掌握Spring Boot开发技术。 本书内容通俗易懂,适合Spring Boot开发的初学者(特别是在校学生)、Web应用开发者和企业级应用开发爱好者等读者;可以作为大学课程的教学用教材、自学的入门读物、开发过程的参考书。

作者简介

吴胜,副教授,在软件工程、电子商务等方面有丰富的教学经验,曾出版《人工智能基础与应用》《微信小程序开发基础》。

Spring Boot开发实战-微课视频版 PDF下载

目录

目录
  
第1章 ; Spring Boot简介 ; ;  ;1
1.1 ; Spring Boot的发展背景 ; ;  ;1
1.1.1 ; Spring的发展 ; ;  ;1
1.1.2 ; Spring的生态圈 ; ;  ;2
1.1.3 ; Spring Boot的发展 ; ;  ;3
1.2 ; Spring Boot的特征 ; ;  ;4
1.2.1 ; Spring Boot的特点 ; ;  ;4
1.2.2 ; Spring Boot 2的新特性 ; ;  ;4
1.2.3 ; Spring Boot 2的核心模块 ; ;  ;5
1.3 ; Spring Boot的工作机制 ; ;  ;7
1.3.1 ; Spring Boot应用启动入口类的分析 ; ;  ;7
1.3.2 ; Spring Boot 2的幕后工作 ; ;  ;8
1.3.3 ; SpringApplication的执行流程 ; ;  ;8
1.3.4 ; Spring Boot应用启动时控制台输出信息 ; ;  ;9
习题1 ; ;  ;9
第2章 ; Spring Boot开发起步 ; ;  ;10
2.1 ; 配置开发环境 ; ;  ;10
2.1.1 ; 安装JDK ; ;  ;10
2.1.2 ; 安装IntelliJ IDEA ; ;  ;11
2.1.3 ; 安装Spring Tool Suite ; ;  ;11
2.2 ; 创建项目 ; ;  ;13
2.2.1 ; 利用IDEA创建项目 ; ;  ;13
2.2.2 ; 利用STS创建项目 ; ;  ;16
2.3 ; 实现Hello World的Web应用 ; ;  ;17
2.3.1 ; 用IDEA实现Hello World的Web应用 ; ;  ;17
2.3.2  用STS实现Hello World的Web应用    19
2.4  以Hello World应用为例说明项目属性配置    19
2.4.1  配置项目内置属性    19
2.4.2  自定义属性设置    20
2.4.3  利用自定义配置类进行属性设置    21
2.5  Spring Boot开发的一般步骤    23
2.5.1  软件生命周期    23
2.5.2  Spring Boot开发步骤    24
习题2    24
第3章  Spring Boot的相关注解    26
3.1  Java注解    26
3.1.1  Java注解的介绍    26
3.1.2  Java的元注解    27
3.1.3  Java预置的基本注解    30
3.2  Spring注解及注解注入    31
3.2.1  Spring基础注解    31
3.2.2  Spring常见注解    31
3.2.3  Spring的注解注入    35
3.3  Spring Boot的注解    36
3.3.1  Spring Boot基础注解    36
3.3.2  JPA注解    37
3.3.3  异常处理注解    38
3.3.4  注解配置解析和使用环境    38
习题3    39
第4章  Spring Boot的Web应用开发    40
4.1  实现静态Web页面    40
4.1.1  创建类GreetingController    40
4.1.2  创建文件index.html    41
4.1.3  运行程序    41
4.2  实现基于Thymeleaf的Web应用    42
4.2.1  添加依赖    42
4.2.2  修改类GreetingController    42
4.2.3  创建文件hi.html    43
4.2.4  运行程序    43
4.3  Thymeleaf的语法与使用    44
4.3.1  Thymeleaf基础知识    44
4.3.2  Thymeleaf的标准表达式    44
4.3.3  Thymeleaf的表达式对象    45
4.3.4  Thymeleaf设置属性    46
4.3.5  Thymeleaf的迭代和条件语句    48
4.3.6  Thymeleaf模板片段的定义和引用    49
4.4  实现基于Freemarker的Web应用    50
4.4.1  添加依赖    50
4.4.2  创建类TemplateController    50
4.4.3  创建文件helloFtl.ftl    50
4.4.4  运行程序    51
4.5  Spring Boot对Ajax的应用    51
4.5.1  创建类HelloWorldAjaxController    51
4.5.2  创建文件index.html    52
4.5.3  运行程序    52
4.6  Spring Boot实现RESTful风格Web应用    53
4.6.1  创建类BlogController    53
4.6.2  创建文件index.html    54
4.6.3  创建文件blog.html    54
4.6.4  创建文件query.html    55
4.6.5  运行程序    55
4.7  带Bootstrap和jQuery的Web应用    56
4.7.1  添加依赖    56
4.7.2  创建类Person    56
4.7.3  创建类BJController    57
4.7.4  添加辅助文件    58
4.7.5  创建文件index.html    58
4.7.6  运行程序    60
4.8  使用Servlet、过滤器、监听器和拦截器    60
4.8.1  创建类MyServlet1    61
4.8.2  修改入口类1    62
4.8.3  运行程序1    62
4.8.4  创建类MyServlet2    62
4.8.5  修改入口类2    63
4.8.6  运行程序2    64
4.8.7  创建类MyFilter    64
4.8.8  创建类MyServletContextListener    65
4.8.9  创建类MyHttpSessionListener    65
4.8.10  运行程序3    65
4.8.11  创建类MyInterceptor1    66
4.8.12  创建类MyInterceptor2    67
4.8.13  创建类MyWebAppConfigurer    67
4.8.14  运行程序4    68
习题4    68
第5章  Spring Boot的数据库访问    70
5.1  使用JDBC访问H2数据库    71
5.1.1  添加依赖    71
5.1.2  创建类Customer    71
5.1.3  修改入口类    72
5.1.4  修改配置文件application.properties    73
5.1.5  运行程序    74
5.2  使用Spring Data JPA访问H2数据库    75
5.2.1  添加依赖    75
5.2.2  创建类User    76
5.2.3  创建接口UserRepository    76
5.2.4  修改入口类    77
5.2.5  修改配置文件application.properties    78
5.2.6  运行程序    78
5.2.7  程序扩展    79
5.3  使用Spring Data JPA和RESTful访问H2数据库    80
5.3.1  添加依赖    80
5.3.2  创建类Person    80
5.3.3  创建接口PersonRepository    81
5.3.4  修改配置文件application.properties    82
5.3.5  启动程序并进行REST服务测试    82
5.4  使用Spring Data JPA访问MySQL数据库    84
5.4.1  添加依赖    84
5.4.2  创建类User和接口UserRepository    85
5.4.3  修改配置文件和入口类    85
5.4.4  运行程序    86
5.4.5  程序扩展    86
5.5  访问MongoDB数据库    88
5.5.1  添加依赖    88
5.5.2  创建类Person    88
5.5.3  创建接口PersonRepository    89
5.5.4  修改入口类    90
5.5.5  运行程序    91
5.5.6  程序扩展    92
5.5.7  使用REST方法访问MongoDB    93
5.6  访问Neo4j数据库    95
5.6.1  添加依赖    95
5.6.2  创建类Actor    95
5.6.3  创建接口ActorRepository    97
5.6.4  修改配置文件application.properties    97
5.6.5  修改入口类    97
5.6.6  运行程序    98
5.6.7  利用REST方法访问Neo4j    99
5.7  访问数据库完整示例    103
5.7.1  添加依赖    103
5.7.2  创建类Book    103
5.7.3  创建接口BookDao    104
5.7.4  修改配置文件application.properties    104
5.7.5  创建类BookController    105
5.7.6  创建文件bookAdd.html    107
5.7.7  创建文件bookList.html    108
5.7.8  创建文件bookUpdate.html    108
5.7.9  运行程序    109
习题5    112
第6章  Spring Boot的Web服务开发    113
6.1  基于Jersey实现RESTful风格Web服务    113
6.1.1  添加依赖    113
6.1.2  创建类Constant    114
6.1.3  创建类JerseyController    114
6.1.4  创建类JerseyConfig    115
6.1.5  修改入口类    116
6.1.6  运行程序    116
6.1.7  补充说明    117
6.2  使用RESTful风格Web服务    118
6.2.1  网上已有Web服务random的说明    118
6.2.2  创建类Quote    118
6.2.3  创建类Value    119
6.2.4  修改入口类    120
6.2.5  运行程序    121
6.3  使用带AngularJS的RESTful风格Web服务    121
6.3.1  添加依赖和辅助文件    121
6.3.2  创建文件ajs.html    121
6.3.3  运行程序    122
6.4  基于Actuator实现RESTful风格Web服务    123
6.4.1  添加依赖    123
6.4.2  创建类Greeting    123
6.4.3  创建类GreetingController    124
6.4.4  修改配置文件application.properties    124
6.4.5  运行程序    124
6.5  实现跨域资源共享的RESTful风格Web服务    125
6.5.1  添加依赖    125
6.5.2  创建类CORSConfiguration    125
6.5.3  创建类ApiController    126
6.5.4  创建文件CORSjs.html    126
6.5.5  运行程序    127
6.6  实现超媒体驱动的RESTful风格Web服务    128
6.6.1  添加依赖    128
6.6.2  创建类Greet    129
6.6.3  创建类GreetController    129
6.6.4  运行程序    130
6.7  整合CXF的Web服务开发    130
6.7.1  修改文件pom.xml    131
6.7.2  创建类User    132
6.7.3  创建接口UserService    133
6.7.4  创建类UserServiceImpl    134
6.7.5  创建类TestConfig    135
6.7.6  运行程序    135
6.7.7  创建类Client并运行程序    136
习题6    137
第7章  Spring Boot的数据处理    138
7.1  声明式事务    138
7.1.1  添加依赖    138
7.1.2  创建类Account    139
7.1.3  创建接口AccountDao    140
7.1.4  创建接口AccountService    140
7.1.5  创建类AccountController    140
7.1.6  创建配置文件application.yml    141
7.1.7  创建类AccountServiceImpl    141
7.1.8  运行程序    142
7.2  数据缓存    143
7.2.1  添加依赖    144
7.2.2  创建类DemoInfo    144
7.2.3  创建接口DemoInfoRepository    145
7.2.4  创建接口DemoInfoService    146
7.2.5  创建类DemoInfoServiceImpl    146
7.2.6  创建类DemoInfoController    147
7.2.7  创建配置文件后运行程序    148
7.3  使用Druid    149
7.3.1  添加依赖    149
7.3.2  创建类DruidStatViewServlet    150
7.3.3  创建类DruidStatFilter    151
7.3.4  修改入口类    151
7.3.5  运行程序    151
7.3.6  扩展程序并运行程序    152
7.4  使用表单验证    154
7.4.1  添加依赖    154
7.4.2  创建类Student    155
7.4.3  创建接口StudentDao    156
7.4.4  创建接口StudentService    156
7.4.5  创建类StudentServiceImpl    156
7.4.6  创建类StudentController    157
7.4.7  创建文件studentAdd.html    157
7.4.8  创建配置文件并运行程序    158
7.5  整合MyBatis访问数据库    159
7.5.1  添加依赖    159
7.5.2  创建类City    160
7.5.3  创建接口CityDao    161
7.5.4  创建接口CityService    161
7.5.5  创建类CityServiceImpl    161
7.5.6  创建类CityController    162
7.5.7  修改配置文件application.properties    162
7.5.8  运行程序    163
7.6  整合Spring Batch和Quartz    163
7.6.1  添加依赖    163
7.6.2  创建类MyTaskOne    164
7.6.3  创建类MyTaskTwo    164
7.6.4  创建类BatchConfig    165
7.6.5  修改入口类    166
7.6.6  运行程序    167
7.6.7  增加依赖    167
7.6.8  修改类BatchConfig    167
7.6.9  创建类CustomQuartzJob    168
7.6.10  创建类QuartzConfig    170
7.6.11  创建文件quartz.properties和application.properties    172
7.6.12  修改入口类    173
7.6.13  运行程序    173
习题7    174
第8章  Spring Boot的文件应用    175
8.1  文件上传    175
8.1.1  添加依赖    175
8.1.2  创建类FileUploadController    176
8.1.3  创建文件file.html    177
8.1.4  创建文件multifile.html    178
8.1.5  运行程序    178
8.1.6  扩展程序    179
8.2  文件下载    180
8.2.1  添加依赖    180
8.2.2  创建类FileDownloadController    180
8.2.3  创建文件downloadfile.html    182
8.2.4  运行程序    182
8.3  图片文件上传和显示    182
8.3.1  添加依赖    182
8.3.2  创建类User    183
8.3.3  创建接口UserRepository    184
8.3.4  创建类MyWebConfig    184
8.3.5  创建类UserPictureController    185
8.3.6  创建文件zhuce.html    186
8.3.7  创建文件permanager.html    186
8.3.8  创建配置文件application.yml    187
8.3.9  创建目录并运行程序    187
8.4  访问HDFS    188
8.4.1  添加依赖    188
8.4.2  修改入口类    189
8.4.3  运行程序    189
8.4.4  简化程序    190
8.5  用Elasticsearch实现全文搜索    190
8.5.1  安装Elasticsearch并添加依赖    190
8.5.2  创建类EsBlog    191
8.5.3  创建接口EsBlogRepository    192
8.5.4  创建类EsBlogRepositoryTest    192
8.5.5  修改配置文件application.properties    194
8.5.6  运行程序(1)    194
8.5.7  创建类BlogController    194
8.5.8  运行程序(2)    195
8.6  实现邮件发送    196
8.6.1  登录邮箱并开启授权码    196
8.6.2  添加依赖    196
8.6.3  创建接口EmailService    197
8.6.4  创建类EmailServiceImp    198
8.6.5  创建类DemoApplicationTests    200
8.6.6  修改配置文件application.properties    201
8.6.7  创建文件email.html    202
8.6.8  运行程序    202
8.7  用REST Docs创建API文档    203
8.7.1  添加依赖    203
8.7.2  创建类HomeController    204
8.7.3  运行程序    204
8.7.4  创建类WebLayerTest    205
8.7.5  创建文件index.adoc    206
8.7.6  添加插件    206
8.7.7  利用Maven的package命令生成文件    207
习题8    208
第9章  Spring Boot 的WebFlux开发    209
9.1  WebFlux及其编程模型    209
9.1.1  WebFlux    209
9.1.2  Spring Boot的WebFlux编程模型    210
9.2  WebFlux入门应用    211
9.2.1  添加依赖    211
9.2.2  创建类CityHandler    212
9.2.3  创建类CityRouter    212
9.2.4  运行程序    213
9.3  实现基于WebFlux的RESTful服务    213
9.3.1  添加依赖    213
9.3.2  创建类User    213
9.3.3  创建类UserController    214
9.3.4  运行程序    216
9.4  基于WebFlux访问MongoDB数据库    218
9.4.1  添加依赖    218
9.4.2  安装并启动MongoDB数据库    218
9.4.3  创建类Person    219
9.4.4  创建接口PersonRepository    219
9.4.5  创建类PersonController    220
9.4.6  修改配置文件application.properties    220
9.4.7  运行程序    221
9.5  基于WebFlux使用Thymeleaf和MongoDB    221
9.5.1  添加依赖    221
9.5.2  创建类City    222
9.5.3  创建接口CityRepository    223
9.5.4  创建类CityHandler    223
9.5.5  创建类CityController    224
9.5.6  创建文件cityList.html    226
9.5.7  创建文件city.html    226
9.5.8  运行程序    227
9.6  基于WebFlux访问Redis数据库    228
9.6.1  添加依赖    228
9.6.2  创建类Coffee    229
9.6.3  创建类CoffeeConfiguration    229
9.6.4  创建类CoffeeLoader    230
9.6.5  运行程序    231
9.6.6  创建类City    231
9.6.7  创建类CityWebFluxController    232
9.6.8  修改配置文件application.properties    233
9.6.9  运行程序    233
9.6.10  创建类CityWebFluxReactiveController    234
9.7  基于WebFlux使用WebSocket    235
9.7.1  添加依赖    235
9.7.2  创建类EchoHandler    236
9.7.3  创建类WebSocketConfiguration    236
9.7.4  创建类WSClient    237
9.7.5  创建文件websocket-client.html    238
9.7.6  运行程序    238
习题9    239
第10章  Spring Boot开发案例    240
10.1  案例分析    240
 10.1.1  主要界面    240
 10.1.2  主要功能与数据库介绍    243
10.2  案例实现    244
 10.2.1  添加依赖    244
 10.2.2  创建类User、CourseType和Course    245
 10.2.3  创建Service接口    249
 10.2.4  创建Service接口实现类    250
 10.2.5  创建Mapper接口    253
 10.2.6  创建类WebLogAspect    254
 10.2.7  创建类CourseQueryHelper    255
 10.2.8  创建控制器类    256
 10.2.9  修改入口类    262
 10.2.10  创建XML文件    263
 10.2.11  创建HTML文件    266
 10.2.12  修改和创建配置文件    283
 10.2.13  创建CSS文件    284
 10.2.14  配置辅助文件与运行程序    287
习题10    287
参考文献    288

前沿

前言
  
  Spring以简化企业级应用开发为己任。无论是Web应用开发、数据库访问还是当前的大数据处理、分布式应用集成,都能看到Spring的身影。然而,一转眼,作为EJB颠覆者的Spring也从最初的轻量级工具变成了“庞然大物”。而Spring Boot由于能极大地简化配置,并且能和当下流行的微服务架构契合,因此一出现便受到了大家的追捧。
  Spring Boot在Java应用开发领域快速兴起,其原因除了它具有约定大于配置、采用更简洁的配置方式来替代XML等特点外,还有一个重要原因是用Spring Boot来开发时不需要同时面对多个框架(如Struts2、Spring和Spring MVC、Hinernate或MyBatis)和不同的视图显示技术(如JSP、Servlet等)。
  不同框架之间的联系、整合问题以及由此带来的更加复杂的配置问题(特别是利用XML进行配置时)是Spring学习者在学习时(特别是入门阶段)需要面对的一个重要难题。而Spring Boot较好地封装了相关工具和框架(如Tomcat、Hibernate、MySQL驱动包等),可以开箱即用这些工具和框架,使得Spring Boot开发比较简单。
  但是,软件开发领域“没有银弹”。Spring Boot全面封装、开箱即用使得开发变得更加快速、透明、高效的同时,对于初学者而言,Spring Boot开发时的依赖管理和配置信息设置问题是需要面对的一个挑战。好在开发工具(如Spring Tool Suite、IntelliJ IDEA)以及帮助文档可以有效地帮助Spring Boot初学者降低学习难度。
  另外,Spring Boot的应用比较多,这使得Spring Boot的内容略显庞杂。而且,Spring Boot还在快速地更新,这会导致本书介绍的一些知识点在新版本中可能会有更新,于是需要读者在开发时参考官方文档进行知识更新。这些因素也增加了Spring Boot的学习难度。
  为了帮助读者更好地掌握Spring Boot开发技术,本书按照开发步骤组织各章节的内容,循序渐进地介绍Spring Boot的开发知识和示例代码。为了帮助读者更好地安排学习时间和帮助教师更好地安排授课,在下表中给出了各章的建议学时(建议学时分为建议理论学时和建议实践学时)。
  
章  内  容
建议理论学时
建议实践学时
   第1章  Spring Boot简介
2
0
   第2章  Spring Boot开发起步
2
2
   第3章  Spring Boot的相关注解
3
0
   第4章  Spring Boot的Web应用开发
5
3
   第5章  Spring Boot的数据库访问
5
3
   第6章  Spring Boot的Web服务开发
5
3
   第7章  Spring Boot的数据处理
4
2
   第8章  Spring Boot的文件应用
4
2
   第9章  Spring Boot的WebFlux开发
4
3
   第10章  Spring Boot开发案例
2
2
   合计学时
36
20
  在开设Spring Boot开发的相关课程时可以根据总学时、学生基础和教学目标等情况调整各章的学时。学习者也可以有选择地阅读各章节内容并安排好学时。
  为便于教学,本书有教学视频、源代码、课件等配套资源。
  (1)获取教学视频方式:读者可以先扫描本书封底的文泉云盘防盗码,再扫描书中相应的视频二维码,观看教学视频。
  (2)获取源代码及参考答案方式:先扫描本书封底的文泉云盘防盗码,再扫描下方二维码,即可获取。
                                               
  (3)其他配套资源可以扫描本书封底的课件二维码下载。
  由于时间短,加上编者水平有限,书中难免有疏漏之处,敬请读者朋友批评指正。
  
     编  者

    2019年1月

免费在线读

第3章
Spring Boot的相关注解
  对第1章中例1-1的代码进行分析,可以知道注解(Annotation)在Spring Boot开发中占有重要的地位。注解为在代码中添加信息提供了一种形式化的方法,通过注解可以很方便地在代码中某个地方使用被注解的对象。注解常见的作用包括生成文档、跟踪代码依赖性和替代配置文件、在编译时进行格式检查(如@Override 放在方法前)等。
  为了帮助读者更好地理解后面章节的示例代码,本章介绍Spring Boot注解以及和Spring Boot注解密切相关的Java注解、Spring注解等内容。
3.1  Java注解
  JRE的库包 java.lang.annotation中代码包括注解相关的接口、类等内容。接口 java.lang.annotation.Annotation是所有自定义注解自动继承的接口,不需要定义时指定,类似于所有Java类都自动继承的Object类。
  3.1.1  Java注解的介绍
  注解是一系列元数据,它利用元数据来解释、说明程序代码(即被注解的对象)。但是,注解不是所标注的代码的组成部分。注解对于代码的运行效果没有直接影响。注解的作用包括:
  (1) 提供信息给编译器,编译器可以利用注解来探测错误和警告信息。
  (2) 软件工具可以利用注解信息来生成代码、HTML文档或者做其他相应处理。
  (3) 运行时的处理,某些注解可以在程序运行时接受代码的提取。
  在开始学习注解具体语法之前,可以把注解看成一张标签。与接口和类一样,注解也是一种类型。注解是自Java 1.5开始引入的概念,它允许开发者定义自己的注解类型和使用自定义的注解。注解通过关键字@interface进行定义,代码如例3-1所示。
  【例3-1】 注解定义的代码示例。
  
     public @interface TestAnnotation {
     }
     
  
  例3-1中的代码自定义了一个名字为 TestAnnotaion 的注解,该注解自动继承了类java.lang.annotation.Annotation。创建了自定义注解后,就可以使用自定义的注解。注解的使用方法如例3-2所示。
  【例3-2】 使用自定义注解的代码示例。
  
     @TestAnnotation
     public class Test {
     }
     
  
  例3-2创建了一个类Test,并在类定义的上方加上了@TestAnnotation注解,就意味着用TestAnnotation注解了类Test。
  3.1.2  Java的元注解
  要想更好地使用注解,还需要理解元注解。元注解是加到注解上的注解,它的目的是解释、说明其他普通注解。元注解有@Retention、@Documented、@Target、@Inherited、@Repeatable共5种。
  元注解@Retention应用到一个注解时,说明该注解的存活时间。它的取值包括RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME。其中,RetentionPolicy.SOURCE表明注解只在源码阶段保留,在编译器进行编译时被丢弃。RetentionPolicy.CLASS表明注解被保留到编译进行的时候,而不会被加载到 JVM 中。RetentionPolicy.RUNTIME表明注解可以保留到程序运行的时候,它会被加载进入JVM中;在程序运行时可以获取到它们。
  应用元注解@Retention的代码示例如例3-3所示,在该示例中设定注解TestAnnotation 可以在程序运行时被获取到。
  【例3-3】 应用元注解@Retention的代码示例。
  
     @Retention(RetentionPolicy.RUNTIME)
     public @interface TestAnnotation {
     }
     
  
  元注解@Documented表示注解内容会被Javadoc工具提取成文档,文档内容会因为注解内容的不同而不同。
  元注解@Target表示注解用于什么地方,如类型、方法和域等。元注解@Target的取    值包括ElementType.FIELD、ElementType.METHOD、ElementType.PARAMETER、ElementType.CONSTRUCTOR、ElementType.LOCAL_VARIABLE、ElementType.TYPE、ElementType.ANNOTATION_TYPE、ElementType.PACKAGE。其中,ElementType.FIELD表示对字段、枚举常量的注解,ElementType.METHOD表示对方法的注解,ElementType.PARAMETER表示对方法参数的注解,ElementType.CONSTRUCTOR表示对构造函数的注解,ElementType.LOCAL_VARIABLE表示对局部变量的注解,ElementType.ANNOTATION_TYPE表示对注解类型的注解,ElementType.PACKAGE表示对包的注解,ElementType.TYPE表示对接口、类、枚举、注解等任意类型的注解。
  被元注解@Inherited注解过的注解作用于父类后,子类会自动继承父类的注解。应用的示例代码如例3-4所示。
  【例3-4】 应用元注解@Inherited的代码示例。
  
     //该示例由3部分组成
     //定义注解
     @Inherited
     @Retention(RetentionPolicy.RUNTIME)
     @interface Test {}
     
     //在父类中增加注解
     @Test
     public class A {}
     
     //子类B虽然没有明确给出注解信息,但是它会继承父类A中的注解@Test
     public class B extends A {}
     
  
  元注解@Repeatable是在Java 1.8中引入的注解,其应用的示例代码如例3-5所示。Persons 可以被看作是一张总标签,上面贴满了 Person 这种同类型但内容不一样的标签。于是,可以同时给 SuperMan 贴上画家、程序员、产品经理等标签(即加上3个注解)。
  【例3-5】 应用元注解@Repeatable的代码示例。
  
     //Persons是用数组存放注解的容器注解,它里面必须要有一个 value 属性,即数组
     @interface Persons {
         Person[]  value();
     }
     //可以重复、多次应用Persons注解
     @Repeatable(Persons.class)
     @interface Person{
         String role default "";
     }
     //不同属性的Person注解
     @Person(role="artist")
     @Person(role="coder")
     @Person(role="PM")
     public class SuperMan{
     }
     
  
  注解中可以拥有属性(也叫作成员变量),示例代码如例3-6所示。表示自定义的注解 TestAnnotation注解拥有 id 和 msg 两个属性,返回类型分别为int和String。
  【例3-6】 带属性的注解代码示例。
  
     @Target(ElementType.TYPE)
     @Retention(RetentionPolicy.RUNTIME)
     public @interface TestAnnotation {
         int id();
         String msg();
     }
     
  
  使用注解时,应该给属性赋值。属性的赋值方法是在注解后面的括号内以“属性=取值”的形式进行的,多个属性的赋值之间用逗号隔开,示例代码如例3-7所示。需要注意的是,注解中属性的类型只能是 8 种基本数据类型和类、接口、注解及它们的数组。
  【例3-7】 给注解属性赋值的应用代码示例。
  
     @TestAnnotation(id=3,msg="hello annotation")
     public class Test {
     }
     
  
  注解中属性可以有默认值,默认值需要用关键字 default 指定,示例代码如例3-8所示。注解TestAnnotation 中属性id 的默认值被指定为 ?1,属性msg的默认值被指定为"Hi"。
  【例3-8】 给注解属性指定默认值的代码示例。
  
     @Target(ElementType.TYPE)
     @Retention(RetentionPolicy.RUNTIME)
     public @interface TestAnnotation {
         public int id() default -1;
         public String msg() default "Hi";
     }
     
  
  假如指定了属性默认值,可以不用再在注解TestAnnotation 后面的括号内对属性进行赋值。示例代码如例3-9所示。
  【例3-9】 属性有默认值的注解应用代码示例。
  
     @TestAnnotation()
     public class Test {}
     
  
  如果注解只有一个属性时,应用这个注解时则可以省略属性名而将属性值直接填写到注解后面的括号内,如例3-10所示。
  【例3-10】 单一属性注解简单应用的代码示例。
  
     @Check("hi")
     int a;
     
  
  例3-11代码和例3-10代码的效果是一样的。
  【例3-11】 单一属性注解完整应用的代码示例。
  
     @Check(value="hi")
     int a;
     
  如果一个注解没有任何属性,应用这个注解时注解后面的括号则可以省略,如例3-12所示。
  【例3-12】 无属性注解的应用代码示例。
  
     @Perform
     public void testMethod(){}
     
  3.1.3  Java预置的基本注解
  在java.lang包下,Java预先提供了@Deprecated、@SuppressWarnings、@Override、@SafeVarargs、@FunctionalInterface共5个基本注解。
  注解@Deprecated是用来标记过时的元素。编译器在编译阶段遇到这个注解时会发出提醒警告,告诉开发者正在调用一个过时的元素(如过时的方法、类、成员变量)。
  注解@SuppressWarnings表示阻止警告的意思。使用@Deprecated 注解后,编译器有时会给开发者发出警告提醒;当开发者想忽略警告提醒时,可以通过 @SuppressWarnings 注解达到目的。@SuppressWarnings的参数有deprecation(表示忽略使用了过时元素时的警告)、unchecked(表示忽略执行了未检查转换时的警告)、fallthrough(表示忽略 switch 程序块直接通往下一种情况而没有break 时的警告)、path(表示忽略类路径、源文件路径等路径中有不存在的路径时的警告)、serial(表示忽略可序列化的类缺少 serialVersionUID 定义时的警告)、finally(表示忽略任何 finally 子句不能正常完成时的警告)、all(表示忽略关于所有情况的警告)。
  注解@Override表示子类要重写父类(或接口)的对应方法。如果想重写父类的方法,如toString()方法,则在方法前面加上@Override,系统可以帮助检查方法的正确性。示例代码如例3-13所示。
  【例3-13】 注解@Override的应用代码示例。
  
     //@Override可以帮助检查方法的正确性
     @Override
     public String toString(){...} //这是子类方法正确的写法
     
     //下面子类方法是错误的,有@Override,系统可以帮助检查出tostring的拼写错误
     @Override
     public String tostring(){...}
     
     //下面子类方法是错误的,由于没有@Override,系统不会帮助检查出tostring的拼写错误
     public String tostring(){...}
     
  
  注解@SafeVarargs被用来标识参数安全类型,它被用来提醒开发者不要用参数做一些不安全的操作,它的存在会阻止编译器产生 unchecked 这样的警告。它是在 Java 1.7 中引入的注解。
  注解@FunctionalInterface被用来指定某个接口必须是函数式接口,否则就会编译出错。@FunctionalInterface是 Java 1.8 引入的新特性。如果接口中有且只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。

Spring Boot开发实战-微课视频版 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:Spring Boot开发实战-微课视频版