Spring 攻略PDF电子书下载
- 电子书积分:18 积分如何计算积分?
- 作 者:GaryMak著
- 出 版 社:北京:人民邮电出版社
- 出版年份:2009
- ISBN:9787115208903
- 页数:603 页
第一部分 核心概念 2
第1章 控制反转和容器 2
1.1 使用容器管理组件 2
1.1.1 问题描述 2
1.1.2 解决方案 2
1.1.3 实现方法 3
1.2 使用服务定位器降低查找组件的复杂性 7
1.2.1 问题描述 7
1.2.2 解决方案 7
1.2.3 实现方法 7
1.3 应用控制反转和依赖注入 8
1.3.1 问题描述 8
1.3.2 解决方案 8
1.3.3 实现方法 9
1.4 理解不同类型的依赖注入 10
1.4.1 问题描述 10
1.4.2 解决方案 10
1.4.3 实现方法 11
1.5 使用配置文件配置容器 13
1.5.1 问题描述 13
1.5.2 解决方案 14
1.5.3 实现方法 14
1.6 小结 16
第2章 Spring简介 17
2.1 Spring Framework 17
2.1.1 Spring的模块介绍 17
2.1.2 Spring的发布版本 19
2.1.3 Spring的项目 20
2.2 安装Spring Framework 21
2.2.1 问题描述 21
2.2.2 解决方案 21
2.2.3 实现方法 21
2.3 建立Spring项目 22
2.3.1 问题描述 22
2.3.2 解决方案 22
2.3.3 实现方法 23
2.4 安装Spring IDE 24
2.4.1 问题描述 24
2.4.2 解决方案 24
2.4.3 实现方法 24
2.5 使用Spring IDE的Bean-supporting特性 26
2.5.1 问题描述 26
2.5.2 解决方案 26
2.5.3 实现方法 26
2.6 小结 31
第3章 Spring中的Bean配置 32
3.1 在Spring IoC容器里配置Bean 32
3.1.1 问题描述 32
3.1.2 解决方案 32
3.1.3 实现方法 32
3.2 实例化Spring IoC容器 36
3.2.1 问题描述 36
3.2.2 解决方案 36
3.2.3 实现方法 36
3.3 解决构造器歧义 38
3.3.1 问题描述 38
3.3.2 解决方案 38
3.3.3 实现方法 38
3.4 指定Bean引用 41
3.4.1 问题描述 41
3.4.2 解决方案 41
3.4.3 实现方法 41
3.5 通过依赖检查来检查属性 44
3.5.1 问题描述 44
3.5.2 解决方案 45
3.5.3 实现方法 45
3.6 通过@Required注解检查属性 46
3.6.1 问题描述 46
3.6.2 解决方案 46
3.6.3 实现方法 47
3.7 XML配置里的Bean自动装配 48
3.7.1 问题描述 48
3.7.2 解决方案 49
3.7.3 实现方法 49
3.8 使用@Autowired和@Resource自动装配Bean 52
3.8.1 问题描述 52
3.8.2 解决方案 52
3.8.3 实现方法 52
3.9 继承Bean配置 58
3.9.1 问题描述 58
3.9.2 解决方案 58
3.9.3 实现方法 58
3.10 为Bean属性定义集合 61
3.10.1 问题描述 61
3.10.2 解决方案 61
3.10.3 实现方法 61
3.11 为集合元素指定数据类型 67
3.11.1 问题描述 67
3.11.2 解决方案 67
3.11.3 实现方法 67
3.12 使用工厂Bean和Utility Schema定义集合 69
3.12.1 问题描述 69
3.12.2 解决方案 69
3.12.3 实现方法 69
3.13 在classpath中扫描组件 71
3.13.1 问题描述 71
3.13.2 解决方案 71
3.13.3 实现方法 72
3.14 小结 76
第4章 高级Spring IoC容器 77
4.1 通过调用构造器创建Bean 77
4.1.1 问题描述 77
4.1.2 解决方案 77
4.1.3 实现方法 77
4.2 通过调用静态工厂方法创建Bean 80
4.2.1 问题描述 80
4.2.2 解决方案 80
4.2.3 实现方法 80
4.3 通过调用实例工厂方法创建Bean 81
4.3.1 问题描述 81
4.3.2 解决方案 81
4.3.3 实现方法 81
4.4 使用Spring的工厂Bean创建Bean 83
4.4.1 问题描述 83
4.4.2 解决方案 83
4.4.3 实现方法 83
4.5 根据静态字段声明Bean 85
4.5.1 问题描述 85
4.5.2 解决方案 85
4.5.3 实现方法 85
4.6 根据对象属性声明Bean 86
4.6.1 问题描述 86
4.6.2 解决方案 86
4.6.3 实现方法 86
4.7 设置Bean的作用域 88
4.7.1 问题描述 88
4.7.2 解决方案 88
4.7.3 实现方法 88
4.8 定制Bean的初始化和销毁过程 90
4.8.1 问题描述 90
4.8.2 解决方案 90
4.8.3 实现方法 91
4.9 使Bean感知容器 95
4.9.1 问题描述 95
4.9.2 解决方案 95
4.9.3 实现方法 96
4.10 创建Bean后置处理器 96
4.10.1 问题描述 96
4.10.2 解决方案 96
4.10.3 实现方法 97
4.11 外部化Bean配置 100
4.11.1 问题描述 100
4.11.2 解决方案 100
4.11.3 实现方法 100
4.12 解析文本信息 101
4.12.1 问题描述 101
4.12.2 解决方案 101
4.12.3 实现方法 101
4.13 使用应用程序事件进行通信 103
4.13.1 问题描述 103
4.13.2 解决方案 103
4.13.3 实现方法 104
4.14 在Spring里注册属性编辑器 106
4.14.1 问题描述 106
4.14.2 解决方案 106
4.14.3 实现方法 106
4.15 创建定制的属性编辑器 108
4.15.1 问题描述 108
4.15.2 解决方案 109
4.15.3 实现方法 109
4.16 加载外部资源 110
4.16.1 问题描述 110
4.16.2 解决方案 110
4.16.3 实现方法 111
4.17 小结 113
第5章 动态代理和经典的Spring AOP 114
5.1 非模块化的横切关注点所带来的问题 115
5.1.1 追踪方法 116
5.1.2 验证参数 119
5.1.3 找出问题 120
5.2 使用动态代理模块化横切关注点 122
5.2.1 问题描述 122
5.2.2 解决方案 122
5.2.3 实现方法 122
5.3 使用经典的Spring通知来模块化横切关注点 127
5.3.1 问题描述 127
5.3.2 解决方案 127
5.3.3 实现方法 128
5.4 使用经典的Spring切入点匹配方法 135
5.4.1 问题描述 135
5.4.2 解决方案 135
5.4.3 实现方法 136
5.5 为Bean自动创建代理 138
5.5.1 问题描述 138
5.5.2 解决方案 138
5.5.3 实现方法 138
5.6 小结 140
第6章 Spring 2.xAOP和AspectJ支持 141
6.1 在Spring中启用AspectJ注解支持 141
6.1.1 问题描述 141
6.1.2 解决方案 142
6.1.3 实现方法 142
6.2 用AspectJ注解声明切面 144
6.2.1 问题描述 144
6.2.2 解决方案 144
6.2.3 实现方法 144
6.3 访问连接点信息 149
6.3.1 问题描述 149
6.3.2 解决方案 149
6.3.3 实现方法 149
6.4 指定切面优先级 150
6.4.1 问题描述 150
6.4.2 解决方案 150
6.4.3 实现方法 150
6.5 重用切入点定义 152
6.5.1 问题描述 152
6.5.2 解决方案 152
6.5.3 实现方法 152
6.6 编写AspectJ切入点表达式 154
6.6.1 问题描述 154
6.6.2 解决方案 154
6.6.3 实现方法 154
6.7 为Bean引入行为 158
6.7.1 问题描述 158
6.7.2 解决方案 158
6.7.3 实现方法 158
6.8 为Bean引入状态 161
6.8.1 问题描述 161
6.8.2 解决方案 161
6.8.3 实现方法 161
6.9 用基于XML的配置声明切面 163
6.9.1 问题描述 163
6.9.2 解决方案 163
6.9.3 实现方法 163
6.10 加载时在Spring中织入AspectJ切面 165
6.10.1 问题描述 165
6.10.2 解决方案 166
6.10.3 实现方法 166
6.11 在Spring中配置AspectJ切面 170
6.11.1 问题描述 170
6.11.2 解决方案 170
6.11.3 实现方法 170
6.12 将Spring Bean注入到领域对象中 171
6.12.1 问题描述 171
6.12.2 解决方案 171
6.12.3 实现方法 171
6.13 小结 174
第二部分 基础主题 178
第7章 Spring对JDBC的支持 178
7.1 直接使用JDBC的问题 178
7.1.1 建立应用程序数据库 179
7.1.2 理解DAO设计模式 180
7.1.3 用JDBC实现DAO 180
7.1.4 在Spring中配置数据源 182
7.1.5 运行DAO 183
7.2 用JDBC模板更新数据库 184
7.2.1 问题描述 184
7.2.2 解决方案 184
7.2.3 实现方法 184
7.3 用JDBC模板查询数据库 188
7.3.1 问题描述 188
7.3.2 解决方案 189
7.3.3 实现方法 189
7.4 简化JDBC模板的创建 193
7.4.1 问题描述 193
7.4.2 解决方案 193
7.4.3 实现方法 194
7.5 在Java 1.5中使用简单的JDBC模板 196
7.5.1 问题描述 196
7.5.2 解决方案 196
7.5.3 实现方法 196
7.6 在JDBC模板中使用具名参数 199
7.6.1 问题描述 199
7.6.2 解决方案 199
7.6.3 实现方法 199
7.7 将JDBC操作建模为细粒度的对象 201
7.7.1 问题描述 201
7.7.2 解决方案 201
7.7.3 实现方法 201
7.8 在Spring JDBC框架中处理异常 205
7.8.1 问题描述 205
7.8.2 解决方案 205
7.8.3 实现方法 205
7.9 小结 209
第8章 Spring中的事务管理 211
8.1 事务管理的问题 211
8.2 选择事务管理器实现 216
8.2.1 问题描述 216
8.2.2 解决方案 217
8.2.3 实现方法 217
8.3 用事务管理器API编程式地管理事务 218
8.3.1 问题描述 218
8.3.2 解决方案 218
8.3.3 实现方法 218
8.4 用事务模板编程式地管理事务 219
8.4.1 问题描述 219
8.4.2 解决方案 220
8.4.3 实现方法 220
8.5 用经典的Spring AOP声明式地管理事务 222
8.5.1 问题描述 222
8.5.2 解决方案 222
8.5.3 实现方法 222
8.6 用事务通知声明式地管理事务 224
8.6.1 问题描述 224
8.6.2 解决方案 224
8.6.3 实现方法 225
8.7 用@Transactional注解声明式地管理事务 226
8.7.1 问题描述 226
8.7.2 解决方案 226
8.7.3 实现方法 226
8.8 设置传播事务属性 227
8.8.1 问题描述 227
8.8.2 解决方案 227
8.8.3 实现方法 228
8.9 设置隔离事务属性 231
8.9.1 问题描述 231
8.9.2 解决方案 231
8.9.3 实现方法 232
8.10 设置回滚事务属性 238
8.10.1 问题描述 238
8.10.2 解决方案 238
8.10.3 实现方法 238
8.11 设置超时和只读事务属性 239
8.11.1 问题描述 239
8.11.2 解决方案 239
8.11.3 实现方法 239
8.12 用加载时织入来管理事务 240
8.12.1 问题描述 240
8.12.2 解决方案 241
8.12.3 实现方法 241
8.13 小结 244
第9章 Spring对ORM的支持 245
9.1 直接使用ORM框架的问题 245
9.1.1 利用Hibernate API和Hibernate XML映射持久化对象 247
9.1.2 利用Hibernate API和JPA注解持久化对象 250
9.1.3 用Hibernate作为JPA引擎持久化对象 252
9.2 在Spring中配置ORM资源工厂 255
9.2.1 问题描述 255
9.2.2 解决方案 256
9.2.3 实现方法 256
9.3 用Spring的ORM模板持久化对象 261
9.3.1 问题描述 261
9.3.2 解决方案 261
9.3.3 实现方法 262
9.4 用Hibernate的上下文会话持久化对象 267
9.4.1 问题描述 267
9.4.2 解决方案 267
9.4.3 实现方法 267
9.5 用JPA的上下文注入持久化对象 270
9.5.1 问题描述 270
9.5.2 解决方案 270
9.5.3 实现方法 270
9.6 小结 273
第10章 Spring MVC框架 274
10.1 用Spring MVC开发简单的Web应用程序 274
10.1.1 问题描述 274
10.1.2 解决方案 274
10.1.3 实现方法 275
10.2 将请求映射到处理程序 284
10.2.1 问题描述 284
10.2.2 解决方案 284
10.2.3 实现方法 285
10.3 用Handler Interceptor拦截请求 287
10.3.1 问题描述 287
10.3.2 解决方案 287
10.3.3 实现方法 288
10.4 解析用户区域 290
10.4.1 问题描述 290
10.4.2 解决方案 290
10.4.3 实现方法 290
10.5 外部化区分区域的文本信息 292
10.5.1 问题描述 292
10.5.2 解决方案 292
10.5.3 实现方法 292
10.6 按名称解析视图 293
10.6.1 问题描述 293
10.6.2 解决方案 293
10.6.3 实现方法 293
10.7 将异常映射到视图 296
10.7.1 问题描述 296
10.7.2 解决方案 296
10.7.3 实现方法 296
10.8 构造ModelAndView对象 297
10.8.1 问题描述 297
10.8.2 解决方案 297
10.8.3 实现方法 298
10.9 创建带有参数化视图的控制器 299
10.9.1 问题描述 299
10.9.2 解决方案 299
10.9.3 实现方法 300
10.10 用表单控制器处理表单 301
10.10.1 问题描述 301
10.10.2 解决方案 301
10.10.3 实现方法 302
10.11 用向导表单控制器处理多页表单 313
10.11.1 问题描述 313
10.11.2 解决方案 313
10.11.3 实现方法 313
10.12 将多个动作分组到一个控制器 321
10.12.1 问题描述 321
10.12.2 解决方案 321
10.12.3 实现方法 321
10.13 创建Excel和PDF视图 326
10.13.1 问题描述 326
10.13.2 解决方案 326
10.13.3 实现方法 326
10.14 用注解开发控制器 330
10.14.1 问题描述 330
10.14.2 解决方案 330
10.14.3 实现方法 330
10.15 小结 336
第11章 整合Spring与其他Web框架 337
11.1 在通用的Web应用程序中访问Spring 337
11.1.1 问题描述 337
11.1.2 解决方案 337
11.1.3 实现方法 338
11.2 整合Spring与Struts 1.x 342
11.2.1 问题描述 342
11.2.2 解决方案 342
11.2.3 实现方法 342
11.3 整合Spring与JSF 347
11.3.1 问题描述 347
11.3.2 解决方案 348
11.3.3 实现方法 348
11.4 整合Spring与DWR 352
11.4.1 问题描述 352
11.4.2 解决方案 352
11.4.3 实现方法 352
11.5 小结 355
第12章 Spring对测试的支持 356
12.1 用JUnit和TestNG创建测试 357
12.1.1 问题描述 357
12.1.2 解决方案 357
12.1.3 实现方法 357
12.2 创建单元测试和集成测试 361
12.2.1 问题描述 361
12.2.2 解决方案 362
12.2.3 实现方法 362
12.3 单元测试Spring MVC控制器 370
12.3.1 问题描述 370
12.3.2 解决方案 370
12.3.3 实现方法 370
12.4 管理集成测试中的应用程序上下文 374
12.4.1 问题描述 374
12.4.2 解决方案 374
12.4.3 实现方法 375
12.5 将测试夹具注入到集成测试中 380
12.5.1 问题描述 380
12.5.2 解决方案 381
12.5.3 实现方法 381
12.6 管理集成测试中的事务 384
12.6.1 问题描述 384
12.6.2 解决方案 384
12.6.3 实现方法 385
12.7 在集成测试中访问数据库 389
12.7.1 问题描述 389
12.7.2 解决方案 390
12.7.3 实现方法 390
12.8 利用Spring的通用测试注解 393
12.8.1 问题描述 393
12.8.2 解决方案 393
12.8.3 实现方法 394
12.9 小结 395
第三部分 高级主题 398
第13章 Spring Security框架 398
13.1 保护URL访问 398
13.1.1 问题描述 398
13.1.2 解决方案 398
13.1.3 实现方法 399
13.2 登录Web应用程序 407
13.2.1 问题描述 407
13.2.2 解决方案 407
13.2.3 实现方法 408
13.3 验证用户 411
13.3.1 问题描述 411
13.3.2 解决方案 411
13.3.3 实现方法 412
13.4 指定访问控制决策 419
13.4.1 问题描述 419
13.4.2 解决方案 419
13.4.3 实现方法 420
13.5 保护方法调用 422
13.5.1 问题描述 422
13.5.2 解决方案 422
13.5.3 实现方法 422
13.6 处理视图中的安全 425
13.6.1 问题描述 425
13.6.2 解决方案 425
13.6.3 实现方法 425
13.7 处理领域对象的安全 427
13.7.1 问题描述 427
13.7.2 解决方案 427
13.7.3 实现方法 427
13.8 小结 436
第14章 Spring Portlet MVC框架 437
14.1 用Spring Portlet MVC开发简单的Portlet 437
14.1.1 问题描述 437
14.1.2 解决方案 437
14.1.3 实现方法 438
14.2 将Portlet请求映射到处理程序 444
14.2.1 问题描述 444
14.2.2 解决方案 444
14.2.3 实现方法 444
14.3 用简单表单控制器处理Portlet表单 453
14.3.1 问题描述 453
14.3.2 解决方案 453
14.3.3 实现方法 453
14.4 使用注解来开发Portlet控制器 460
14.4.1 问题描述 460
14.4.2 解决方案 460
14.4.3 实现方法 460
14.5 小结 465
第15章 Spring Web Flow 466
15.1 用Spring Web Flow管理简单的UI流程 466
15.1.1 问题描述 466
15.1.2 解决方案 466
15.1.3 实现方法 467
15.2 用不同的流程类型进行Web流程建模 472
15.2.1 问题描述 472
15.2.2 解决方案 472
15.2.3 实现方法 473
15.3 保护Web流程 482
15.3.1 问题描述 482
15.3.2 解决方案 483
15.3.3 实现方法 483
15.4 在Web流程中持久化对象 484
15.4.1 问题描述 484
15.4.2 解决方案 485
15.4.3 实现方法 485
15.5 集成Spring Web Flow与JSF 490
15.5.1 问题描述 490
15.5.2 解决方案 490
15.5.3 实现方法 491
15.6 小结 496
第16章 Spring远程服务和Web服务 497
16.1 通过RMI暴露和调用服务 498
16.1.1 问题描述 498
16.1.2 解决方案 498
16.1.3 实现方法 499
16.2 通过HTTP公开和调用服务 502
16.2.1 问题描述 502
16.2.2 解决方案 502
16.2.3 实现方法 502
16.3 选择Web服务的开发方法 505
16.3.1 问题描述 505
16.3.2 解决方案 505
16.3.3 实现方法 505
16.4 利用XFire公开和调用Web服务 507
16.4.1 问题描述 507
16.4.2 解决方案 507
16.4.3 实现方法 507
16.5 定义Web服务契约 512
16.5.1 问题描述 512
16.5.2 解决方案 512
16.5.3 实现方法 513
16.6 利用Spring-WS实现Web服务 516
16.6.1 问题描述 516
16.6.2 解决方案 516
16.6.3 实现方法 517
16.7 利用Spring-WS调用Web服务 522
16.7.1 问题描述 522
16.7.2 解决方案 522
16.7.3 实现方法 522
16.8 利用XML封送技术开发Web服务 525
16.8.1 问题描述 525
16.8.2 解决方案 525
16.8.3 实现方法 525
16.9 利用注解创建服务端点 530
16.9.1 问题描述 530
16.9.2 解决方案 530
16.9.3 实现方法 530
16.10 小结 531
第17章 Spring对EJB和JMS的支持 532
17.1 用Spring创建EJB 2.x组件 532
17.1.1 问题描述 532
17.1.2 解决方案 532
17.1.3 实现方法 533
17.2 在Spring中访EJB 2.x组件 537
17.2.1 问题描述 537
17.2.2 解决方案 538
17.2.3 实现方法 538
17.3 在Spring中访问EJB 3.0组件 542
17.3.1 问题描述 542
17.3.2 解决方案 542
17.3.3 实现方法 542
17.4 用Spring发送和接收JMS消息 545
17.4.1 问题描述 545
17.4.2 解决方案 545
17.4.3 实现方法 546
17.5 在Spring中创建消息驱动的POJO 558
17.5.1 问题描述 558
17.5.2 解决方案 559
17.5.3 实现方法 559
17.6 小结 564
第18章 Spring对JMX、电子邮件和调度的支持 565
18.1 将Spring Bean导出为JMX MBean 565
18.1.1 问题描述 565
18.1.2 解决方案 565
18.1.3 实现方法 566
18.2 发布和监听JMX通知 575
18.2.1 问题描述 575
18.2.2 解决方案 575
18.2.3 实现方法 575
18.3 在Spring中访问远程JMX MBean 577
18.3.1 问题描述 577
18.3.2 解决方案 577
18.3.3 实现方法 577
18.4 用Spring的电子邮件支持来发送电子邮件 580
18.4.1 问题描述 580
18.4.2 解决方案 580
18.4.3 实现方法 580
18.5 用Spring的JDK Timer支持进行调度 587
18.5.1 问题描述 587
18.5.2 解决方案 587
18.5.3 实现方法 587
18.6 利用Spring的Quartz支持进行调度 589
18.6.1 问题描述 589
18.6.2 解决方案 589
18.6.3 实现方法 589
18.7 小结 593
第19章 Spring中的脚本编程 594
19.1 用脚本语言实现Bean 594
19.1.1 问题描述 594
19.1.2 解决方案 594
19.1.3 实现方法 594
19.2 将Spring Bean注入脚本 598
19.2.1 问题描述 598
19.2.2 解决方案 598
19.2.3 实现方法 598
19.3 从脚本中刷新Bean 600
19.3.1 问题描述 600
19.3.2 解决方案 600
19.3.3 实现方法 600
19.4 定义内联脚本 601
19.4.1 问题描述 601
19.4.2 解决方案 601
19.4.3 实现方法 601
19.5 小结 603
- 《设计十六日 国内外美术院校报考攻略》沈海泯著 2018
- 《金匮要略核心知识点全攻略》温成平,曹灵勇 2019
- 《英国攻略》《英国攻略》编辑部编著 2019
- 《公务员结构化面试优化攻略》高志纯著 2019
- 《手机短视频全攻略》杨可编著 2020
- 《澳大利亚攻略》《澳大利亚攻略》编辑部编著 2019
- 《公务员考试快速突破手册 面试7天全攻略》李永新主编 2016
- 《错音攻略》潘东音著 2019
- 《高中英语学习攻略》程晓琴著 2019
- 《吉他小白的弹奏秘籍 吉他拍击技巧攻略》陈飞编著 2019
- 《中风偏瘫 脑萎缩 痴呆 最新治疗原则与方法》孙作东著 2004
- 《水面舰艇编队作战运筹分析》谭安胜著 2009
- 《王蒙文集 新版 35 评点《红楼梦》 上》王蒙著 2020
- 《TED说话的力量 世界优秀演讲者的口才秘诀》(坦桑)阿卡什·P.卡里亚著 2019
- 《燕堂夜话》蒋忠和著 2019
- 《经久》静水边著 2019
- 《魔法销售台词》(美)埃尔默·惠勒著 2019
- 《微表情密码》(波)卡西亚·韦佐夫斯基,(波)帕特里克·韦佐夫斯基著 2019
- 《看书琐记与作文秘诀》鲁迅著 2019
- 《酒国》莫言著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《办好人民满意的教育 全国教育满意度调查报告》(中国)中国教育科学研究院 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《人民院士》吴娜著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《中国人民的心》杨朔著;夕琳编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中华人民共和国成立70周年优秀文学作品精选 短篇小说卷 上 全2册》贺邵俊主编 2019
- 《指向核心素养 北京十一学校名师教学设计 数学 九年级 上 配人教版》周志英总主编 2019
- 《中华人民共和国成立70周年优秀文学作品精选 中篇小说卷 下 全3册》洪治纲主编 2019