Spring Framework Reference Documentation

Authors

Rod Johnson , Juergen Hoeller , Keith Donald , Colin Sampaleanu , Rob Harrop , Thomas Risberg , Alef Arendsen , Darren Davison , Dmitriy Kopylenko , Mark Pollack , Thierry Templier , Erwin Vervaet , Portia Tung , Ben Hale , Adrian Colyer , John Lewis , Costin Leau , Mark Fisher , Sam Brannen , Ramnivas Laddad , Arjen Poutsma , Chris Beams , Tareq Abedrabbo , Andy Clement , Dave Syer , Oliver Gierke , Rossen Stoyanchev , Phillip Webb , Rob Winch , Brian Clozel , Stephane Nicoll , Sebastien Deleuze

4.1.3.RELEASE

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.


Table of Contents

I. Spring 框架概述
1. 开启Spring之旅
2. Spring框架概述
2.1. 依赖注入和控制反转
2.2. 模块
2.2.1. 核心容器
2.2.2. AOP和Instrumentation
2.2.3. Messaging
2.2.4. Data Access/Integration
2.2.5. Web
2.2.6. Test
2.3. Usage scenarios
2.3.1. Dependency Management and Naming Conventions
Spring Dependencies and Depending on Spring
Maven Dependency Management
Maven "Bill Of Materials" Dependency
Gradle Dependency Management
Ivy Dependency Management
Distribution Zip Files
2.3.2. Logging
Not Using Commons Logging
Using SLF4J
Using Log4J
II. Spring 4.x的新功能
3. Spring 4.0增强和新功能
3.1. 改进的入门体验
3.2. 移除过时的包和方法
3.3. Java 8 (以及6和7)
3.4. Java EE 6和7
3.5. Groovy DSL定义Bean
3.6. 核心容器改进
3.7. 常规Web改进
3.8. WebSocket、SockJS和STOMP消息
3.9. 测试改进
4. Spring 4.1增强和新功能
4.1. JMS改进
4.2. Caching(缓存)改进
4.3. Web改进
4.4. WebSocket STOMP消息改进
4.5. 测试改进
III. 核心技术
5. IoC 容器
5.1. Spring IoC容器和Bean概述
5.2. 容器概述
5.2.1. 配置元数据
5.2.2. 实例化容器
编写基于XML的配置元数据
5.2.3. 使用容器
5.3. Bean概述
5.3.1. bean的命名
bean的别名
5.3.2. 实例化bean
通过构造函数实例化
使用静态工厂方法实例化
使用实例工厂方法实例化
5.4. 依赖
5.4.1. 依赖注入
构造器注入
Setter注入
依赖解决步骤
一些依赖注入的例子
5.4.2. 依赖配置详解
直接变量 (基本类型, String类型等)
引用其他bean(协作者)
内部bean
集合
Null和空字符串
XML使用p命名空间简化
XML shortcut with the c-namespace
组合属性名称
5.4.3. 使用 depends-on
5.4.4. 延迟初始化bean
5.4.5. 自动装配协作者
自动装配的局限性和缺点
将bean排除在自动装配之外
5.4.6. 方法注入
Lookup 方法注入
自定义方法的替代方案
5.5. Bean作用域
5.5.1. 单例作用域
5.5.2. 原型作用域
5.5.3. 依赖原型bean的单例bean
5.5.4. 请求作用域、会话作用域和全局会话作用域
基本的web配置
请求作用域
会话作用域
全局会话作用域
应用程序作用域
将上述作用域的bean作为依赖
5.5.5. Custom scopes
Creating a custom scope
Using a custom scope
5.6. 定制bean特性
5.6.1. 生命周期回调
初始化回调函数
析构回调函数
缺省的初始化和析构方法
组合生命周期机制
启动和关闭回调
在非web应用中优雅地关闭Spring IoC容器
5.6.2. ApplicationContextAware and BeanNameAware
5.6.3. 其他 Aware 接口
5.7. Bean定义的继承
5.8. 容器拓展点
5.8.1. 使用BeanPostProcessor自定义beans
Example: Hello World, BeanPostProcessor-style
Example: The RequiredAnnotationBeanPostProcessor
5.8.2. Customizing configuration metadata with a BeanFactoryPostProcessor
Example: the Class name substitution PropertyPlaceholderConfigurer
Example: the PropertyOverrideConfigurer
5.8.3. Customizing instantiation logic with a FactoryBean
5.9. Annotation-based container configuration
5.9.1. @Required
5.9.2. @Autowired
5.9.3. Fine-tuning annotation-based autowiring with qualifiers
5.9.4. Using generics as autowiring qualifiers
5.9.5. CustomAutowireConfigurer
5.9.6. @Resource
5.9.7. @PostConstruct and @PreDestroy
5.10. Classpath scanning and managed components
5.10.1. @Component and further stereotype annotations
5.10.2. Meta-annotations
5.10.3. Automatically detecting classes and registering bean definitions
5.10.4. Using filters to customize scanning
5.10.5. Defining bean metadata within components
5.10.6. Naming autodetected components
5.10.7. Providing a scope for autodetected components
5.10.8. Providing qualifier metadata with annotations
5.11. Using JSR 330 Standard Annotations
5.11.1. Dependency Injection with @Inject and @Named
5.11.2. @Named: a standard equivalent to the @Component annotation
5.11.3. Limitations of the standard approach
5.12. 基于Java(Java-based)的容器配置
5.12.1. 基本概念: @Bean and @Configuration
5.12.2. Instantiating the Spring container using AnnotationConfigApplicationContext
Simple construction
Building the container programmatically using register(Class<?>…)
Enabling component scanning with scan(String…)
使用AnnotationConfigWebApplicationContext支持Web应用
5.12.3. 使用@Bean注解
Declaring a bean
Receiving lifecycle callbacks
Specifying bean scope
Customizing bean naming
Bean aliasing
Bean description
5.12.4. Using the @Configuration annotation
Injecting inter-bean dependencies
Lookup method injection
Further information about how Java-based configuration works internally
5.12.5. Composing Java-based configurations
Using the @Import annotation
Conditionally including @Configuration classes or @Beans
Combining Java and XML configuration
5.13. Environment抽象
5.13.1. Bean定义配置文件
@Profile
5.13.2. XML的Bean定义配置文件
启用配置文件
默认配置
5.13.3. PropertySource的抽象
5.13.4. @PropertySource
5.13.5. Placeholder resolution in statements
5.14. 注册一个LoadTimeWeaver
5.15. ApplicationContext 的附加功能
5.15.1. Internationalization using MessageSource
5.15.2. Standard and Custom Events
5.15.3. Convenient access to low-level resources
5.15.4. web 应用程序中 ApplicationContext 的便利实例化
5.15.5. Deploying a Spring ApplicationContext as a Java EE RAR file
5.16. The BeanFactory
5.16.1. BeanFactory or ApplicationContext?
5.16.2. Glue code and the evil singleton
6. Resources
6.1. 介绍
6.2. Resource 接口
6.3. 内置的 Resource 实现
6.3.1. UrlResource
6.3.2. ClassPathResource
6.3.3. FileSystemResource
6.3.4. ServletContextResource
6.3.5. InputStreamResource
6.3.6. ByteArrayResource
6.4. ResourceLoader 接口
6.5. ResourceLoaderAware 接口
6.6. 资源依赖
6.7. 应用上下文和资源路径
6.7.1. 构造应用上下文
构造 ClassPathXmlApplicationContext 实例 - 快捷方式
6.7.2. 使用通配符构造应用上下文
Ant 风格模式
classpath*: 的可移植性
通配符的补充说明
6.7.3. FileSystemResource 警告
7. 数据校验、数据绑定和类型转换
7.1. 概述
7.2. 使用Spring的Validator接口来进行数据校验
7.3. 通过错误编码得到错误信息
7.4. Bean的操作和BeanWrapper
7.4.1. Setting和getting基本及嵌套属性
7.4.2. 内嵌的属性编辑器实现
Registering additional custom PropertyEditors
7.5. Spring Type Conversion
7.5.1. Converter SPI
7.5.2. ConverterFactory
7.5.3. GenericConverter
ConditionalGenericConverter
7.5.4. ConversionService API
7.5.5. Configuring a ConversionService
7.5.6. Using a ConversionService programmatically
7.6. Spring Field Formatting
7.6.1. Formatter SPI
7.6.2. Annotation-driven Formatting
Format Annotation API
7.6.3. FormatterRegistry SPI
7.6.4. FormatterRegistrar SPI
7.6.5. Configuring Formatting in Spring MVC
7.7. Configuring a global date & time format
7.8. Spring Validation
7.8.1. Overview of the JSR-303 Bean Validation API
7.8.2. Configuring a Bean Validation Provider
Injecting a Validator
Configuring Custom Constraints
Spring-driven Method Validation
Additional Configuration Options
7.8.3. Configuring a DataBinder
7.8.4. Spring MVC 3 Validation
Triggering @Controller Input Validation
Configuring a Validator for use by Spring MVC
Configuring a JSR-303/JSR-349 Validator for use by Spring MVC
8. Spring 表达式语言 (SpEL)
8.1. 介绍
8.2. 功能概述
8.3. 使用Spring的表达接口 表达式求值
8.3.1. EvaluationContext 接口
类型转换
8.3.2. 解析器配置
8.3.3. SpEL 编译
编译器限制
8.4. 定义bean的beandef表达支持
8.4.1. 基于XML的配置
8.4.2. 基于注解的配置
8.5. 语言参考
8.5.1. 文字表达式
8.5.2. Properties, Arrays, Lists, Maps, Indexers
8.5.3. 内联列表
8.5.4. 内联maps
8.5.5. array构造
8.5.6. 方法
8.5.7. 运算符
关系运算符
逻辑运算符
数学运​​算符
8.5.8. 赋值
8.5.9. 类型
8.5.10. 构造
8.5.11. 变量
该#this 和 #root变量
8.5.12. 函数
8.5.13. bean引用
8.5.14. 三元运算符(IF-THEN-ELSE)
8.5.15. Elvis操作符
8.5.16. 安全导航运算符
8.5.17. 集合选择
8.5.18. 集合投影
8.5.19. 表达模板
8.6. Classes used in the examples
9. Aspect Oriented Programming with Spring
9.1. Introduction
9.1.1. AOP concepts
9.1.2. Spring AOP capabilities and goals
9.1.3. AOP Proxies
9.2. @AspectJ 支持
9.2.1. 开启 @AspectJ 支持
开启 @AspectJ 的Java配置方式
开启 @AspectJ 的XML配置方式
9.2.2. 声明一个切面
9.2.3. Declaring a pointcut
Supported Pointcut Designators
Combining pointcut expressions
Sharing common pointcut definitions
Examples
Writing good pointcuts
9.2.4. Declaring advice
Before advice
After returning advice
After throwing advice
After (finally) advice
Around advice
Advice parameters
Advice ordering
9.2.5. Introductions
9.2.6. Aspect instantiation models
9.2.7. Example
9.3. Schema-based AOP support
9.3.1. Declaring an aspect
9.3.2. Declaring a pointcut
9.3.3. Declaring advice
Before advice
After returning advice
After throwing advice
After (finally) advice
Around advice
Advice parameters
Advice ordering
9.3.4. Introductions
9.3.5. Aspect instantiation models
9.3.6. Advisors
9.3.7. Example
9.4. Choosing which AOP declaration style to use
9.4.1. Spring AOP or full AspectJ?
9.4.2. @AspectJ or XML for Spring AOP?
9.5. Mixing aspect types
9.6. Proxying mechanisms
9.6.1. Understanding AOP proxies
9.7. Programmatic creation of @AspectJ Proxies
9.8. Using AspectJ with Spring applications
9.8.1. Using AspectJ to dependency inject domain objects with Spring
Unit testing @Configurable objects
Working with multiple application contexts
9.8.2. Other Spring aspects for AspectJ
9.8.3. Configuring AspectJ aspects using Spring IoC
9.8.4. Load-time weaving with AspectJ in the Spring Framework
A first example
Aspects
META-INF/aop.xml
Required libraries (JARS)
Spring configuration
Environment-specific configuration
9.9. Further Resources
10. Spring AOP APIs
10.1. Introduction
10.2. Pointcut API in Spring
10.2.1. Concepts
10.2.2. Operations on pointcuts
10.2.3. AspectJ expression pointcuts
10.2.4. Convenience pointcut implementations
Static pointcuts
Dynamic pointcuts
10.2.5. Pointcut superclasses
10.2.6. Custom pointcuts
10.3. Advice API in Spring
10.3.1. Advice lifecycles Advice 生命周期
10.3.2. Advice types in Spring
Interception around advice 拦截 around Advice
Before advice
Throws advice 抛出Advice
After Returning advice 后置advice
Introduction advice 介绍的Advice
10.4. Advisor API in Spring
10.5. Using the ProxyFactoryBean to create AOP proxies
10.5.1. Basics
10.5.2. JavaBean properties
10.5.3. JDK- and CGLIB-based proxies
10.5.4. Proxying interfaces
10.5.5. Proxying classes
10.5.6. Using global advisors
10.6. 简洁的代理定义
10.7. 使用编程方式通过ProxyFactory创建AOP代理
10.8. 操作通知对象
10.9. Using the "auto-proxy" facility
10.9.1. Autoproxy bean definitions
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
AbstractAdvisorAutoProxyCreator
10.9.2. Using metadata-driven auto-proxying
10.10. Using TargetSources
10.10.1. Hot swappable target sources
10.10.2. Pooling target sources
10.10.3. Prototype target sources
10.10.4. ThreadLocal target sources
10.11. 定义新的通知类型
10.12. 更多资源
10.13. Spring 测试框架介绍
10.14. 单元测试
10.14.1. 模拟对象
Environment
JNDI
Servlet API
Portlet API
10.14.2. 单元测试支持类
通用组件
Spring MVC
10.15. 集成测试
10.15.1. 概览
10.15.2. 集成测试的目标
上下文管理和缓存
测试夹具的依赖注入
事务管理
集成测试支持类
10.15.3. JDBC 测试支持
10.15.4. 注解
Spring 测试相关注解
标准注解支持
Spring JUnit 测试注解
测试元注解的支持
10.15.5. Spring TestContext Framework
核心概述
TestExecutionListener 配置
上下文管理
Dependency injection of test fixtures
Testing request and session scoped beans
Transaction management
Executing SQL scripts
TestContext Framework support classes
10.15.6. Spring MVC Test Framework
Server-Side Tests
Client-Side REST Tests
10.15.7. PetClinic Example
10.16. Further Resources
IV. 数据访问
11. 事务管理
11.1. Spring Framework事务管理介绍
11.2. Spring Framework的事务支持模型的优点
11.2.1. 全局事务
11.2.2. 本地事务
11.2.3. Spring Framework的一致性编程模型
11.3. 理解 Spring Framework 的事务抽象
11.4. 在事务中同步资源
11.4.1. 高级同步方法
11.4.2. 低级的同步方法
11.4.3. 事务发现数据源代理(TransactionAwareDataSourceProxy)
11.5. 声明式事务管理
11.5.1. 理解Spring Framework的声明式事务实现
11.5.2. 声明式事务实现的例子
11.5.3. 回滚一个声明式事务
11.5.4. 为不同的bean配置不同的事务
11.5.5. <tx:advice/> 设置
11.5.6. @Transactional 的使用
@Transactional 设置
@Transactional 使用多个事务管理器
自定义快捷注解
11.5.7. 事务传播性
需要 Required
需要新的 RequiresNew
嵌套 Nested
11.5.8. 通知事务操作
11.5.9. 与AspectJ一起使用@Transactional
11.6. 编程式事务管理
11.6.1. 使用TransactionTemplate
指定事务设置
11.6.2. PlatformTransactionManager的使用
11.7. 在编程式和声明式事务管理中选择
11.8. 应用服务器的特异性集成
11.8.1. IBM WebSphere
11.8.2. Oracle WebLogic Server
11.9. 通用问题的解决
11.9.1. 特殊DataSource使用错误的事务管理器
11.10. 更多资源
12. DAO 支持
12.1. 介绍
12.2. 一致的异常层次结构
12.3. 用于配置DAO或库类的注解
13. Data access with JDBC
13.1. Introduction to Spring Framework JDBC
13.1.1. 选择一个访问JDBC数据库的方法
13.2. Using the JDBC core classes to control basic JDBC processing and error handling
13.2.1. JdbcTemplate
Examples of JdbcTemplate class usage
JdbcTemplate best practices
13.2.2. NamedParameterJdbcTemplate
13.2.3. SQLExceptionTranslator
13.2.4. Executing statements
13.2.5. Running queries
13.2.6. Updating the database
13.2.7. Retrieving auto-generated keys
13.3. Controlling database connections
13.3.1. DataSource
13.3.2. DataSourceUtils
13.3.3. SmartDataSource
13.3.4. AbstractDataSource
13.3.5. SingleConnectionDataSource
13.3.6. DriverManagerDataSource
13.3.7. TransactionAwareDataSourceProxy
13.3.8. DataSourceTransactionManager
13.3.9. NativeJdbcExtractor
13.4. JDBC batch operations
13.4.1. Basic batch operations with the JdbcTemplate
13.4.2. Batch operations with a List of objects
13.4.3. Batch operations with multiple batches
13.5. Simplifying JDBC operations with the SimpleJdbc classes
13.5.1. Inserting data using SimpleJdbcInsert
13.5.2. Retrieving auto-generated keys using SimpleJdbcInsert
13.5.3. Specifying columns for a SimpleJdbcInsert
13.5.4. Using SqlParameterSource to provide parameter values
13.5.5. Calling a stored procedure with SimpleJdbcCall
13.5.6. Explicitly declaring parameters to use for a SimpleJdbcCall
13.5.7. How to define SqlParameters
13.5.8. Calling a stored function using SimpleJdbcCall
13.5.9. Returning ResultSet/REF Cursor from a SimpleJdbcCall
13.6. 利用java对象操作JDBC
13.6.1. SqlQuery
13.6.2. MappingSqlQuery
13.6.3. SqlUpdate
13.6.4. StoredProcedure
13.7. Common problems with parameter and data value handling
13.7.1. Providing SQL type information for parameters
13.7.2. Handling BLOB and CLOB objects
13.7.3. Passing in lists of values for IN clause
13.7.4. Handling complex types for stored procedure calls
13.8. Embedded database support
13.8.1. Why use an embedded database?
13.8.2. Creating an embedded database instance using Spring XML
13.8.3. Creating an embedded database instance programmatically
13.8.4. Extending the embedded database support
13.8.5. Using HSQL
13.8.6. Using H2
13.8.7. Using Derby
13.8.8. Testing data access logic with an embedded database
13.9. Initializing a DataSource
13.9.1. Initializing a database instance using Spring XML
Initialization of Other Components that Depend on the Database
14. 对象关系映射(ORM)数据访问
14.1. 介绍 Spring 中的 ORM
14.2. 常见的 ORM 集成方面的注意事项
14.2.1. 资源和事务管理
14.2.2. 异常转化
14.3. Hibernate
14.3.1. 在 Spring 容器中设置 SessionFactory
14.3.2. 基于平常的 Hibernate 3 API 来实现 DAO
14.3.3. 声明式事务划分
14.3.4. 编程式事务划分
14.3.5. 事务管理策略
14.3.6. 比较容器管理和本地定义的资源
14.3.7. 在 Hibernate 中的虚假应用服务器告警
14.4. JDO
14.4.1. PersistenceManagerFactory 设置
14.4.2. 基于平常 JDO API 的 DAO 的实现
14.4.3. Transaction management
14.4.4. JdoDialect
14.5. JPA
14.5.1. 三种设置选项
LocalEntityManagerFactoryBean
从 JNDI 中获得 EntityManagerFactory
LocalContainerEntityManagerFactoryBean
处理多个持久单元
14.5.2. 基于平常 JPA的 DAO 的实现
14.5.3. 事务管理
14.5.4. JpaDialect
15. Marshalling XML using O/X Mappers
15.1. Introduction
15.1.1. Ease of configuration
15.1.2. Consistent Interfaces
15.1.3. Consistent Exception Hierarchy
15.2. Marshaller and Unmarshaller
15.2.1. Marshaller
15.2.2. Unmarshaller
15.2.3. XmlMappingException
15.3. Using Marshaller and Unmarshaller
15.4. XML Schema-based Configuration
15.5. JAXB
15.5.1. Jaxb2Marshaller
XML Schema-based Configuration
15.6. Castor
15.6.1. CastorMarshaller
15.6.2. Mapping
XML Schema-based Configuration
15.7. XMLBeans
15.7.1. XmlBeansMarshaller
XML Schema-based Configuration
15.8. JiBX
15.8.1. JibxMarshaller
XML Schema-based Configuration
15.9. XStream
15.9.1. XStreamMarshaller
V. The Web
16. Web MVC 框架
16.1. Spring Web MVC 框架介绍
16.1.1. Spring Web MVC 的特点
16.1.2. 其他 MVC 实现的可插入性
16.2. The DispatcherServlet
16.2.1. WebApplicationContext 的专用 bean
16.2.2. 默认的 DispatcherServlet 配置
16.2.3. DispatcherServlet 处理顺序
16.3. Implementing Controllers
16.3.1. 使用 @Controller 定义控制器
16.3.2. 使用 @RequestMapping 映射请求
@Controller' 和 AOP 代理
New Support Classes for @RequestMapping methods in Spring MVC 3.1
URI 模版模式
在 URI 模版上使用正则表达式
路径模式
路径模式比较
路径模式与占位符
路径模式的后缀匹配
矩阵变量
可消费的媒体类型
可生产的媒体类型
请求参数和头字段值
16.3.3. 定义 @RequestMapping 处理方法
可支持的方法参数类型
可支持的方法返回类型
使用 @RequestParam 将请求参数绑定到方法参数
使用 @RequestBody 映射请求体
使用 @ResponseBody 映射响应体
使用 @RestController 创建 REST 控制器
使用 HttpEntity
在方法上使用 @ModelAttribute
在方法参数上使用 @ModelAttribute
使用 @SessionAttributes 将模型属性存储到 HTTP session
指定 redirect 和 flash 属性
处理 "application/x-www-form-urlencoded" 数据
使用 @CookieValue 映射 cookie 值
使用 @RequestHeader 映射请求头字段属性
方法参数和类型转换
自定义 WebDataBinder 的初始化
支持 Last-Modified 响应头,方便缓存内容
使用 @ControllerAdvice 注解增强控制器
支持 Jackson 序列化视图
支持 Jackson JSONP
16.3.4. 异步请求处理
异步请求的异常处理
拦截异步请求
一步请求处理的配置
16.3.5. 测试控制器
16.4. Handler 映射
16.4.1. 使用 HandlerInterceptor 拦截请求
16.5. 视图解析
16.5.1. 使用 ViewResolver 接口解析视图
16.5.2. 视图解析器链
16.5.3. 重定向到视图
RedirectView
redirect: 前缀
forward: 前缀
16.5.4. ContentNegotiatingViewResolver
16.6. 使用 flash 属性
16.7. 构建 URI
16.7.1. 根据控制器和方法构建 URI
16.7.2. Building URIs to Controllers and methods from views
16.8. 使用本地化
16.8.1. 获得时区信息
16.8.2. AcceptHeaderLocaleResolver
16.8.3. CookieLocaleResolver
16.8.4. SessionLocaleResolver
16.8.5. LocaleChangeInterceptor
16.9. 主题的使用
16.9.1. 主题概览
16.9.2. 视图定义
16.9.3. 主题解析器
16.10. Spring’s multipart (文件上传) 支持
16.10.1. Introduction
16.10.2. Using a MultipartResolver with Commons FileUpload
16.10.3. Using a MultipartResolver with Servlet 3.0
16.10.4. 在表单中处理一个上传文件
16.10.5. Handling a file upload request from programmatic clients
16.11. 异常处理
16.11.1. 异常处理
16.11.2. @ExceptionHandler
16.11.3. Handling Standard Spring MVC Exceptions
16.11.4. Annotating Business Exceptions With @ResponseStatus
16.11.5. Customizing the Default Servlet Container Error Page
16.12. Web Security
16.13. Convention over configuration support
16.13.1. The Controller ControllerClassNameHandlerMapping
16.13.2. The Model ModelMap (ModelAndView)
16.13.3. The View - RequestToViewNameTranslator
16.14. ETag support
16.15. Code-based Servlet container initialization
16.16. Configuring Spring MVC
16.16.1. 启用 MVC Java 配置或 MVC XML 命名空间
16.16.2. Customizing the Provided Configuration
16.16.3. Interceptors
16.16.4. Content Negotiation
16.16.5. 视图控制器
16.16.6. 视图解析器
16.16.7. 资源服务
16.16.8. 回退到“默认”的 Servlet 来提供资源服务
16.16.9. Path Matching
16.16.10. Advanced Customizations with MVC Java Config
16.16.11. Advanced Customizations with the MVC Namespace
17. 视图技术
17.1. 简介
17.2. JSP & JSTL
17.2.1. 视图解析器
17.2.2. Plain-old JSPs versus JSTL
17.2.3. 帮助简化开发的额外的标签
17.2.4. 使用Spring提供的表单标签库
配置
表单标签
input 标签
checkbox 标签
The checkboxes tag
The radiobutton tag
The radiobuttons tag
The password tag
The select tag
The option tag
The options tag
The textarea tag
The hidden tag
The errors tag
HTTP Method Conversion
HTML5 Tags
17.3. Tiles
17.3.1. Dependencies
17.3.2. How to integrate Tiles
UrlBasedViewResolver
ResourceBundleViewResolver
SimpleSpringPreparerFactory and SpringBeanPreparerFactory
17.4. Velocity & FreeMarker
17.4.1. 依赖
17.4.2. 上下文配置
17.4.3. 创建模板
17.4.4. 高级配置
velocity.properties
FreeMarker
17.4.5. 绑定支持和表单处理
The bind macros
Simple binding
Form input generation macros
HTML escaping and XHTML compliance
17.5. XSLT
17.5.1. My First Words
Bean definitions
Standard MVC controller code
Convert the model data to XML
Defining the view properties
Document transformation
17.5.2. Summary
17.6. Document views (PDF/Excel)
17.6.1. Introduction
17.6.2. Configuration and setup
Document view definitions
Controller code
Subclassing for Excel views
Subclassing for PDF views
17.7. JasperReports
17.7.1. Dependencies
17.7.2. Configuration
Configuring the ViewResolver
Configuring the Views
About Report Files
Using JasperReportsMultiFormatView
17.7.3. Populating the ModelAndView
17.7.4. Working with Sub-Reports
Configuring Sub-Report Files
Configuring Sub-Report Data Sources
17.7.5. Configuring Exporter Parameters
17.8. Feed Views
17.9. XML Marshalling View
17.10. JSON Mapping View
17.11. XML Mapping View
18. 同其他web框架集成
18.1. 简介
18.2. 通用配置
18.3. JavaServer Faces 1.2
18.3.1. SpringBeanFacesELResolver (JSF 1.2+)
18.3.2. FacesContextUtils
18.4. Apache Struts 2.x
18.5. Tapestry 5.x
18.6. 更多资源
19. Portlet MVC Framework
19.1. Introduction
19.1.1. Controllers - MVC的C层
19.1.2. Views - MVC的V层
19.1.3. Web-scoped beans
19.2. The DispatcherPortlet
19.3. The ViewRendererServlet
19.4. Controllers
19.4.1. AbstractController and PortletContentGenerator
19.4.2. Other simple controllers
19.4.3. Command Controllers
19.4.4. PortletWrappingController
19.5. Handler mappings
19.5.1. PortletModeHandlerMapping
19.5.2. ParameterHandlerMapping
19.5.3. PortletModeParameterHandlerMapping
19.5.4. Adding HandlerInterceptors
19.5.5. HandlerInterceptorAdapter
19.5.6. ParameterMappingInterceptor
19.6. Views and resolving them
19.7. Multipart (file upload) support
19.7.1. Using the PortletMultipartResolver
19.7.2. Handling a file upload in a form
19.8. Handling exceptions
19.9. Annotation-based controller configuration
19.9.1. Setting up the dispatcher for annotation support
19.9.2. Defining a controller with @Controller
19.9.3. Mapping requests with @RequestMapping
19.9.4. Supported handler method arguments
19.9.5. Binding request parameters to method parameters with @RequestParam
19.9.6. Providing a link to data from the model with @ModelAttribute
19.9.7. Specifying attributes to store in a Session with @SessionAttributes
19.9.8. Customizing WebDataBinder initialization
Customizing data binding with @InitBinder
Configuring a custom WebBindingInitializer
19.10. Portlet application deployment
20. WebSocket 支持
20.1. 介绍
20.1.1. WebSocket Fallback Options
20.1.2. 基于消息的架构
20.1.3. Sub-Protocol Support in WebSocket
20.1.4. 我应该使用websocket吗?
20.2. WebSocket API
20.2.1. 创建并配置一个WebSocketHandler
20.2.2. 自定义Websocket Handshake
20.2.3. WebSocketHandler 的装饰器
20.2.4. 部署注意事项
20.2.5. 配置WebSocket 引擎
20.3. SockJS Fallback Options
20.3.1. Overview of SockJS
20.3.2. 启用 SockJS
20.3.3. HTTP Streaming in IE 8, 9: Ajax/XHR vs IFrame
20.3.4. 心跳消息 Heartbeat Messages
20.3.5. Servlet 3 异步请求 Servlet 3 Async Requests
20.3.6. CORS Headers for SockJS
20.3.7. SockJS 客户端
20.4. STOMP Over WebSocket Messaging Architecture
20.4.1. Overview of STOMP
20.4.2. Enable STOMP over WebSocket
20.4.3. Flow of Messages
20.4.4. Annotation Message Handling
20.4.5. Sending Messages
20.4.6. Simple Broker
20.4.7. Full-Featured Broker
20.4.8. Connections To Full-Featured Broker
20.4.9. Using Dot as Separator in @MessageMapping Destinations
20.4.10. Authentication
20.4.11. User Destinations
20.4.12. Listening To ApplicationContext Events and Intercepting Messages
20.4.13. WebSocket Scope
20.4.14. Configuration and Performance
20.4.15. Runtime Monitoring
20.4.16. 测试带注解的控制器方法 Testing Annotated Controller Methods
VI. Integration
21. Remoting and web services using Spring
21.1. Introduction
21.2. Exposing services using RMI
21.2.1. Exporting the service using the RmiServiceExporter
21.2.2. Linking in the service at the client
21.3. Using Hessian or Burlap to remotely call services via HTTP
21.3.1. Wiring up the DispatcherServlet for Hessian and co.
21.3.2. Exposing your beans by using the HessianServiceExporter
21.3.3. Linking in the service on the client
21.3.4. Using Burlap
21.3.5. Applying HTTP basic authentication to a service exposed through Hessian or Burlap
21.4. Exposing services using HTTP invokers
21.4.1. Exposing the service object
21.4.2. Linking in the service at the client
21.5. Web services
21.5.1. Exposing servlet-based web services using JAX-WS
21.5.2. Exporting standalone web services using JAX-WS
21.5.3. Exporting web services using the JAX-WS RI’s Spring support
21.5.4. Accessing web services using JAX-WS
21.6. JMS
21.6.1. Server-side configuration
21.6.2. Client-side configuration
21.7. AMQP
21.8. Auto-detection is not implemented for remote interfaces
21.9. Considerations when choosing a technology
21.10. Accessing RESTful services on the Client
21.10.1. RestTemplate
Working with the URI
Dealing with request and response headers
Jackson JSON Views support
21.10.2. HTTP Message Conversion
StringHttpMessageConverter
FormHttpMessageConverter
ByteArrayHttpMessageConverter
MarshallingHttpMessageConverter
MappingJackson2HttpMessageConverter
MappingJackson2XmlHttpMessageConverter
SourceHttpMessageConverter
BufferedImageHttpMessageConverter
21.10.3. Async RestTemplate
22. Enterprise JavaBeans (EJB) integration
22.1. Introduction
22.2. Accessing EJBs
22.2.1. Concepts
22.2.2. Accessing local SLSBs
22.2.3. Accessing remote SLSBs
22.2.4. Accessing EJB 2.x SLSBs versus EJB 3 SLSBs
22.3. Using Spring’s EJB implementation support classes
22.3.1. EJB 3 injection interceptor
23. JMS (Java消息服务 )
23.1. 介绍
23.2. 使用 Spring JMS
23.2.1. JmsTemplate类
23.2.2. 连接
缓存消息资源
SingleConnectionFactory类
CachingConnectionFactory类
23.2.3. 目的地管理
23.2.4. 消息监听容器
SimpleMessageListenerContainer类
DefaultMessageListenerContainer类
23.2.5. Transaction management
23.3. Sending a Message
23.3.1. Using Message Converters
23.3.2. SessionCallback and ProducerCallback
23.4. Receiving a message
23.4.1. Synchronous Reception
23.4.2. Asynchronous Reception - Message-Driven POJOs
23.4.3. the SessionAwareMessageListener interface
23.4.4. the MessageListenerAdapter
23.4.5. Processing messages within transactions
23.5. Support for JCA Message Endpoints
23.6. Annotation-driven listener endpoints
23.6.1. Enable listener endpoint annotations
23.6.2. Programmatic endpoints registration
23.6.3. Annotated endpoint method signature
23.6.4. Reply management
23.7. JMS Namespace Support
24. JMX
24.1. Introduction
24.2. Exporting your beans to JMX
24.2.1. Creating an MBeanServer
24.2.2. Reusing an existing MBeanServer
24.2.3. Lazy-initialized MBeans
24.2.4. Automatic registration of MBeans
24.2.5. Controlling the registration behavior
24.3. Controlling the management interface of your beans
24.3.1. the MBeanInfoAssembler Interface
24.3.2. Using Source-Level Metadata (Java annotations)
24.3.3. Source-Level Metadata Types
24.3.4. the AutodetectCapableMBeanInfoAssembler interface
24.3.5. Defining management interfaces using Java interfaces
24.3.6. Using MethodNameBasedMBeanInfoAssembler
24.4. Controlling the ObjectNames for your beans
24.4.1. Reading ObjectNames from Properties
24.4.2. Using the MetadataNamingStrategy
24.4.3. Configuring annotation based MBean export
24.5. JSR-160 Connectors
24.5.1. Server-side Connectors
24.5.2. Client-side Connectors
24.5.3. JMX over Burlap/Hessian/SOAP
24.6. Accessing MBeans via Proxies
24.7. Notifications
24.7.1. Registering Listeners for Notifications
24.7.2. Publishing Notifications
24.8. Further Resources
25. JCA CCI
25.1. Introduction
25.2. Configuring CCI
25.2.1. Connector configuration
25.2.2. ConnectionFactory configuration in Spring
25.2.3. Configuring CCI connections
25.2.4. Using a single CCI connection
25.3. Using Spring’s CCI access support
25.3.1. Record conversion
25.3.2. the CciTemplate
25.3.3. DAO support
25.3.4. Automatic output record generation
25.3.5. Summary
25.3.6. Using a CCI Connection and Interaction directly
25.3.7. Example for CciTemplate usage
25.4. Modeling CCI access as operation objects
25.4.1. MappingRecordOperation
25.4.2. MappingCommAreaOperation
25.4.3. Automatic output record generation
25.4.4. Summary
25.4.5. Example for MappingRecordOperation usage
25.4.6. Example for MappingCommAreaOperation usage
25.5. Transactions
26. Email
26.1. 介绍
26.2. 使用
26.2.1. MailSender和SimpleMailMessage的基础使用
26.2.2. JavaMailSender和MimeMessagePreparator的使用
26.3. 使用JavaMail的MimeMessageHelper
26.3.1. 发送附件和内嵌资源
附件
内嵌资源
26.3.2. 用模板库来创建Email内容
使用Velocity的基础例子
27. 任务执行与调度
27.1. 介绍
27.2. Spring的TaskExecutor抽象
27.2.1. TaskExecutor类型
27.2.2. 使用TaskExecutor
27.3. Spring的TaskScheduler抽象
27.3.1. Trigger接口
27.3.2. Trigger实现
27.3.3. TaskScheduler实现
27.4. 调度与异步执行的注解支持
27.4.1. 启用调度注解
27.4.2. @Scheduled注解
27.4.3. @Async注解
27.4.4. Executor使用@Async的条件
27.4.5. @Async的异常管理
27.5. 任务命名空间
27.5.1. 关于scheduler元素
27.5.2. 关于executor元素
27.5.3. 关于scheduled-tasks元素
27.6. 使用Quartz调度程序
27.6.1. 使用JobDetailFactoryBean
27.6.2. 使用MethodInvokingJobDetailFactoryBean
27.6.3. 使用触发器和SchedulerFactoryBean启动任务
28. Dynamic language support
28.1. Introduction
28.2. Defining beans that are backed by dynamic languages
28.2.1. Common concepts
The <lang:language/> element
Refreshable beans
Inline dynamic language source files
Understanding Constructor Injection in the context of dynamic-language-backed beans
28.2.2. JRuby beans
28.2.3. Groovy beans
Customizing Groovy objects via a callback
28.2.4. BeanShell beans
28.3. Scenarios
28.3.1. Scripted Spring MVC Controllers
28.3.2. Scripted Validators
28.4. Bits and bobs
28.4.1. AOP - advising scripted beans
28.4.2. Scoping
28.5. Further Resources
29. Cache 抽象
29.1. 简介
29.2. Understanding the cache abstraction
29.3. Declarative annotation-based caching
29.3.1. @Cacheable annotation
Default Key Generation
Custom Key Generation Declaration
Default Cache Resolution
Custom cache resolution
Conditional caching
Available caching SpEL evaluation context
29.3.2. @CachePut annotation
29.3.3. @CacheEvict annotation
29.3.4. @Caching annotation
29.3.5. @CacheConfig annotation
29.3.6. Enable caching annotations
29.3.7. Using custom annotations
29.4. JCache (JSR-107) annotations
29.4.1. Features summary
29.4.2. Enabling JSR-107 support
29.5. Declarative XML-based caching
29.6. Configuring the cache storage
29.6.1. JDK ConcurrentMap-based Cache
29.6.2. EhCache-based Cache
29.6.3. Guava Cache
29.6.4. GemFire-based Cache
29.6.5. JSR-107 Cache
29.6.6. Dealing with caches without a backing store
29.7. Plugging-in different back-end caches
29.8. How can I set the TTL/TTI/Eviction policy/XXX feature?
VII. Appendices
30. Migrating to Spring Framework 4.0
31. Classic Spring Usage
31.1. Classic ORM usage
31.1.1. Hibernate
the HibernateTemplate
Implementing Spring-based DAOs without callbacks
31.1.2. JDO
JdoTemplate and JdoDaoSupport
31.1.3. JPA
JpaTemplate and JpaDaoSupport
31.2. Classic Spring MVC
31.3. JMS Usage
31.3.1. JmsTemplate
31.3.2. Asynchronous Message Reception
31.3.3. Connections
31.3.4. Transaction Management
32. Classic Spring AOP Usage
32.1. Pointcut API in Spring
32.1.1. Concepts
32.1.2. Operations on pointcuts
32.1.3. AspectJ expression pointcuts
32.1.4. Convenience pointcut implementations
Static pointcuts
Dynamic pointcuts
32.1.5. Pointcut superclasses
32.1.6. Custom pointcuts
32.2. Advice API in Spring
32.2.1. Advice lifecycles
32.2.2. Advice types in Spring
Interception around advice
Before advice
Throws advice
After Returning advice
Introduction advice
32.3. Advisor API in Spring
32.4. Using the ProxyFactoryBean to create AOP proxies
32.4.1. Basics
32.4.2. JavaBean properties
32.4.3. JDK- and CGLIB-based proxies
32.4.4. Proxying interfaces
32.4.5. Proxying classes
32.4.6. Using global advisors
32.5. Concise proxy definitions
32.6. Creating AOP proxies programmatically with the ProxyFactory
32.7. Manipulating advised objects
32.8. Using the "autoproxy" facility
32.8.1. Autoproxy bean definitions
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
AbstractAdvisorAutoProxyCreator
32.8.2. Using metadata-driven auto-proxying
32.9. Using TargetSources
32.9.1. Hot swappable target sources
32.9.2. Pooling target sources
32.9.3. Prototype target sources
32.9.4. ThreadLocal target sources
32.10. Defining new Advice types
32.11. Further resources
33. XML Schema-based configuration
33.1. Introduction
33.2. XML Schema-based configuration
33.2.1. Referencing the schemas
33.2.2. the util schema
<util:constant/>
<util:property-path/>
<util:properties/>
<util:list/>
<util:map/>
<util:set/>
33.2.3. the jee schema
<jee:jndi-lookup/> (simple)
<jee:jndi-lookup/> (with single JNDI environment setting)
<jee:jndi-lookup/> (with multiple JNDI environment settings)
<jee:jndi-lookup/> (complex)
<jee:local-slsb/> (simple)
<jee:local-slsb/> (complex)
<jee:remote-slsb/>
33.2.4. the lang schema
33.2.5. the jms schema
33.2.6. the tx (transaction) schema
33.2.7. the aop schema
33.2.8. the context schema
<property-placeholder/>
<annotation-config/>
<component-scan/>
<load-time-weaver/>
<spring-configured/>
<mbean-export/>
33.2.9. the tool schema
33.2.10. the jdbc schema
33.2.11. the cache schema
33.2.12. the beans schema
34. Extensible XML authoring
34.1. Introduction
34.2. Authoring the schema
34.3. Coding a NamespaceHandler
34.4. BeanDefinitionParser
34.5. Registering the handler and the schema
34.5.1. META-INF/spring.handlers
34.5.2. META-INF/spring.schemas
34.6. Using a custom extension in your Spring XML configuration
34.7. Meatier examples
34.7.1. Nesting custom tags within custom tags
34.7.2. Custom attributes on normal elements
34.8. Further Resources
35. spring.tld
35.1. Introduction
35.2. the bind tag
35.3. the escapeBody tag
35.4. the hasBindErrors tag
35.5. the htmlEscape tag
35.6. the message tag
35.7. the nestedPath tag
35.8. the theme tag
35.9. the transform tag
35.10. the url tag
35.11. the eval tag
36. spring-form.tld
36.1. Introduction
36.2. the checkbox tag
36.3. the checkboxes tag
36.4. the errors tag
36.5. the form tag
36.6. the hidden tag
36.7. the input tag
36.8. the label tag
36.9. the option tag
36.10. the options tag
36.11. the password tag
36.12. the radiobutton tag
36.13. the radiobuttons tag
36.14. the select tag
36.15. the textarea tag