Spring Framework Documentation
5.3.10
Core Technologies
2. 资源 273
2.1..介绍 273
2.2. Resource 接口 273
2.3.内置Resource 实现 275
2.3.1. UrlResource 275
2.3.2. ClassPathResource 276
2.3.3. FileSystemResource 276
2.3.4. PathResource 277
2.3.5. ServletContextResource 277
2.3.6. InputStreamResource 277
2.3.7. ByteArrayResource 277
2.4.ResourceLoader 接口 278
2.5. ResourcePatternResolver 接口 279
2.6. ResourceLoaderAware 接口 281
2.7.资源作为依赖 282
2.8.应用程序上下文和资源路径 284
2.8.1.构建应用程序上下文 284
2.8.1.1.构造ClassPathXmlApplicationContext实例 :捷径 285
2.8.2.应用程序上下文构造函数资源路径中的通配符 286
2.8.2.1. Ant样式模式 287
2.8.2.2.“classpath*: ” 前缀 288
2.8.2.3.与通配符有关的其它说明 288
2.8.3. FileSystemResource 警告 289
3. 验证、数据绑定和类型转换 292
3.1.使用Spring的Validator接口进行验证 292
3.2.将代码解析为错误消息 296
3.3. Bean操作和BeanWrapper 297
3.3.1.设置和获取基本属性和嵌套属性 297
3.3.2.内置PropertyEditor 实现 301
3.3.2.1.注册其它自定义PropertyEditor 实现 304
3.4. Spring类型转换 310
3.4.1.转换器SPI 310
3.4.2.使用ConverterFactory 311
3.4.3.使用GenericConverter 312
3.4.3.1.使用ConditionalGenericConverter 313
3.4.4. ConversionService API 313
3.4.5.配置ConversionService 314
3.4.6. 通过编程使用ConversionService 315
3.5. Spring字段格式化 317
3.5.1. Formatter SPI 317
3.5.2.注解驱动的格式化 320
3.5.2.1. 格式注解API 323
3.5.3. FormatterRegistry SPI 323
3.5.4. FormatterRegistrar SPI 324
3.5.5.在Spring MVC中配置格式化 324
3.6.配置全局日期和时间格式 325
3.7. Java Bean验证 327
3.7.1. Bean验证概述 327
3.7.2.配置Bean验证提供者 329
3.7.2.1. 注入验证器 329
3.7.2.2. Spring驱动的方法验证 332
3.7.2.3.其它配置选项 333
3.7.3.配置DataBinder 333
3.7.4. Spring MVC 3验证 334
4. Spring表达式语言(SpEL) 335
4.1. 计算 336
4.1.1.理解EvaluationContext 339
4.1.1.1.类型转换 340
4.1.2.解析器配置 341
4.1.3. SpEL编译 343
4.1.3.1.编译器配置 343
4.1.3.2.编译器限制 345
4.2. Bean定义中的表达式 346
4.2.1. XML配置 346
4.2.2.注解配置 347
4.3.语言参考 350
4.3.1.字面量表达式 350
4.3.2.属性、数组、列表、映射和索引器 351
4.3.3.内联列表 354
4.3.4.内联Map 355
4.3.5.构建数组 355
4.3.6.方法 356
4.3.7.运算符 357
4.3.7.1.关系运算符 357
4.3.7.2.逻辑运算符 359
4.3.7.3.数学运算符 361
4.3.7.4.赋值运算符 363
4.3.8.类型 363
4.3.9.构造函数 364
4.3.10.变量 365
4.3.10.1 #this和#root变量 366
4.3.11.函数 367
4.3.12. Bean引用 368
4.3.13.三元运算符(If-Then-Else) 369
4.3.14. Elvis运算符 370
4.3.15.安全导航运算符 372
4.3.16.集合选择 373
4.3.17.集合投影 374
4.3.18.表达式模板 374
4.4.案例中用到的类 376
5. Spring面向切面编程 382
5.1. AOP概念 382
5.2. Spring AOP功能和目标 385
5.3. AOP代理 386
5.4.支持@AspectJ 386
5.4.1.启用@AspectJ支持 387
5.4.1.1.通过Java配置启用@AspectJ支持 387
5.4.1.2.使用XML配置启用@AspectJ支持 387
5.4.2.声明一个切面(Aspect) 388
5.4.3. 声明切入点 389
5.4.3.1.支持的切入点指示符 390
5.4.3.2.组合切入点表达式 392
5.4.3.3.共享公共的切入点定义 393
5.4.3.4.举例 397
5.4.3.5.编写良好的切入点 400
5.4.4.声明通知 401
5.4.4.1.前置通知 401
5.4.4.2.返回后通知 403
5.4.4.3.抛出后通知 405
5.4.4.4. After (Finally) Advice 406
5.4.4.5.环绕通知 407
5.4.4.6.通知参数 409
5.4.4.7.通知排序 416
5.4.5. 引入 417
5.4.6.切面实例化模型 419
5.4.7. AOP举例 420
5.5.基于Schema的AOP支持 424
5.5.1.声明一个切面 424
5.5.2.声明一个切入点 425
5.5.3.声明通知 427
5.5.3.1. Before Advice (前置通知) 427
5.5.3.2. After Returning Advice (返回后通知) 428
5.5.3.3. After Throwing Advice (抛出后通知) 429
5.5.3.4. After (Finally) Advice (后置(最终)通知) 430
5.5.3.5. Around Advice (环绕通知) 431
5.5.3.6.通知参数 432
5.5.3.7.通知排序 436
5.5.4.引入(Introductions) 436
5.5.5. A切面实例化模型 438
5.5.6.通知者 438
5.5.7. AOP Schema举例 439
5.6.选择要使用的AOP声明样式 442
5.6.1. Spring AOP还是全部采用AspectJ? 443
5.6.2. Spring AOP采用@AspectJ 还是XML 443
5.7.混合切面类型 445
5.8.代理机制 445
5.8.1.理解AOP代理 446
5.9.编程创建@AspectJ代理 450
5.10.与Spring应用程序一起使用AspectJ 452
5.10.1.使用AspectJ向Spring注入依赖领域对象 452
5.10.1.1. @Configurable对象的单元测试 456
5.10.1.2.使用多个应用程序上下文 456
5.10.2. AspectJ的其它Spring切面 457
5.10.3.使用Spring IoC配置AspectJ切面 458
5.10.4.在Spring框架中加载时织入AspectJ切面 459
5.10.4.1.第一个例子 460
5.10.4.2.切面 466
5.10.4.3. META-INF/aop.xml 466
5.10.4.4.所需的库(JARS) 466
5.10.4.5. Spring配置 467
5.10.4.6.环境相关的配置 471
5.11.更多资源 472
6. Spring AOP API 473
6.1. Spring中的切入点API 473
6.1.1.概念 473
6.1.2.切入点上的操作 474
6.1.3. AspectJ表达式切入点 474
6.1.4.方便的切入点实现 475
6.1.4.1.静态切入点 475
6.1.4.2.动态切入点 476
6.1.5.切入点超类 477
6.1.6.自定义切入点 478
6.2. Spring中的通知API 478
6.2.1.通知生命周期 478
6.2.2. Spring中的通知类型 478
6.2.2.1.拦截环绕通知 479
6.2.2.2. Before Advice (前置通知) 480
6.2.2.3. Throws Advice (抛出通知) 481
6.2.2.4. After Returning Advice (返回后通知) 484
6.2.2.5. Introduction Advice (引入通知) 485
6.3. Spring中的通知者API 490
6.4.使用ProxyFactoryBean 创建AOP代理 490
6.4.1.基础 490
6.4.2. JavaBean属性 491
6.4.3.基于JDK和基于CGLIB的代理) 492
6.4.4.代理接口 493
6.4.5. 代理类 495
6.4.6.使用全局通知者 496
6.5.简明代理定义 497
6.6.使用ProxyFactory以编程方式创建AOP代理 498
6.7.操作被通知对象 499
6.8.使用自动代理 502
6.8.1.自动代理bean定义 503
6.8.1.1. BeanNameAutoProxyCreator 503
6.8.1.2. DefaultAdvisorAutoProxyCreator 504
6.9.使用TargetSource 实现 505
6.9.1.热交换目标源 506
6.9.2.池化目标源 507
6.9.3. Prototype目标源 509
6.9.4. ThreadLocal 目标源 509
6.10.定义新的通知类型 510
7. Null安全性 511
7.1. 用例 511
7.2. JSR-305元注解 511
8.数据缓冲区和编解码器 513
8.1. DataBufferFactory 513
8.2. DataBuffer 513
8.3. PooledDataBuffer 514
8.4. DataBufferUtils 514
8.5. Codecs(编解码器) 514
8.6.使用DataBuffer 515
9. Logging (日志) 517
10.附录 518
10.1. XML Schemas 518
10.1.1. util Schema 518
10.1.1.1.使用<util:constant/> 518
10.1.1.2.使用<util:property-path/> 521
10.1.1.3.使用<util:properties/> 524
10.1.1.3.使用<util:list/> 524
10.1.1.4.使用<util:map/> 525
10.1.1.5.使用<util:set/> 526
10.1.2. aop Schema 527
10.1.3. context Schema 528
10.1.3.1.使用<property-placeholder/> 529
10.1.3.2.使用<annotation-config/> 529
10.1.3.3.使用<component-scan/> 529
10.1.3.4.使用 <load-time-weaver/> 529
10.1.3.5.使用<spring-configured/> 529
10.1.3.6.使用 <mbean-export/> 530
10.1.4. Beans Schema 530
10.2.编写XML schema 531
10.2.1.编写Schema 531
10.2.2.编写NamespaceHandler 533
10.2.3.使用BeanDefinitionParser 535
10.2.4.注册处理器和Schema 537
10.2.4.1.编写ETA-INF/spring.handlers 537
10.2.4.2.编写“META-INF/spring.schemas” 537
10.2.5. 在Spring XML配置中使用自定义扩展 538
10.2.6. 更多详细示例 538
10.2.6.1.在自定义元素中嵌套自定义元素 539
10.3.应用程序启动步骤 552