共享社区

首页 » 互联网资源共享社区 » 教学资源共享 » Spring Framework 开发参考手册
abc - 2008-5-19 18:02:00
Spring Framework 开发参考手册
下载

***** 该内容需回复才可浏览 *****
在线预览



Spring Framework 开发参考手册



Authors



Rod Johnson, Juergen Hoeller, Alef Arendsen, Colin Sampaleanu,Rob Harrop, Thomas Risberg, Darren Davison, Dmitriy Kopylenko, Mark Pollack, ThierryTemplier, Erwin Vervaet, Portia Tung, Ben Hale, Adrian Colyer, John Lewis, CostinLeau, Rick Evans



2.0



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





Table of Contents



前言



1. 简介



1.1. 概览



1.2. 使用场景



2. Spring 2.0 的新特性



2.1. 简介



2.2. 控制反转(IoC)容器



2.2.1. 更简单的XML配置



2.2.2. 新的bean作用域



2.2.3. 可扩展的XML编写



2.3. 面向切面编程(AOP)



2.3.1. 更加简单的AOP XML配置



2.3.2. 对@AspectJ 切面的支持



2.4. 中间层



2.4.1. 在XML里更为简单的声明性事务配置



2.4.2. JPA



2.4.3. 异步的JMS



2.4.4. JDBC



2.5. Web层



2.5.1. SpringMVC的表单标签库



2.5.2. SpringMVC合理的默认值



2.5.3. Portlet框架



2.6. 其他特性



2.6.1. 动态语言支持



2.6.2. JMX



2.6.3. 任务规划



2.6.4. 对Java 5(Tiger)的支持



2.7. 移植到Spring 2.0



2.7.1. 一些变化



2.7.1.1. Jar包



2.7.1.2. XML配置



2.7.1.3. Deprecated的类和方法



2.7.1.4. ApacheOJB



2.7.1.5. iBatis



2.8. 更新的样例应用



2.9. 改进的文档



I. 核心技术



3. 控制反转容器



3.1. 简介



3.2. 容器和bean的基本原理



3.2.1. 容器



3.2.1.1. 配置元数据



3.2.2. 实例化容器



3.2.2.1. 组成基于XML配置元数据



3.2.3. 多种bean



3.2.3.1. 命名bean



3.2.3.2. 实例化bean



3.2.4. 使用容器



3.3. 依赖



3.3.1. 注入依赖



3.3.1.1. Setter注入



3.3.1.2. 构造器注入



3.3.1.3. 一些例子



3.3.2. 构造器参数的解析



3.3.2.1. 构造器参数类型匹配



3.3.2.2. 构造器参数的索引



3.3.3. bean属性及构造器参数详解



3.3.3.1. 直接量(基本类型、Strings类型等。)



3.3.3.2. 引用其它的bean(协作者)



3.3.3.3. 内部bean



3.3.3.4. 集合



3.3.3.5. Nulls



3.3.3.6. XML-basedconfiguration metadata shortcuts



3.3.3.7. 组合属性名称



3.3.4. 使用depends-on



3.3.5. 延迟初始化bean



3.3.6. 自动装配(autowire)协作者



3.3.6.1. 设置Bean使自动装配失效



3.3.7. 依赖检查



3.3.8. 方法注入



3.3.8.1. Lookup方法注入



3.3.8.2. 自定义方法的替代方案



3.4. bean的作用域



3.4.1. Singleton作用域



3.4.2. Prototype作用域



3.4.3. 其他作用域



3.4.3.1. 初始化web配置



3.4.3.2. Request作用域



3.4.3.3. Session作用域



3.4.3.4. globalsession作用域



3.4.3.5. 作用域bean与依赖



3.4.4. 自定义作用域



3.5. 定制bean特性



3.5.1. Lifecycle接口



3.5.1.1. 初始化回调



3.5.1.2. 析构回调



3.5.2. 了解自己



3.5.2.1. BeanFactoryAware



3.5.2.2. BeanNameAware



3.6. bean定义的继承



3.7. 容器扩展点



3.7.1. 用BeanPostProcessor定制bean



3.7.1.1. 使用BeanPostProcessor的Hello World示例



3.7.1.2. RequiredAnnotationBeanPostProcessor示例



3.7.2. 用BeanFactoryPostProcessor定制配置元数据



3.7.2.1. PropertyPlaceholderConfigurer示例



3.7.2.2. PropertyOverrideConfigurer示例



3.7.3. 使用FactoryBean定制实例化逻辑



3.8. ApplicationContext



3.8.1. 利用MessageSource实现国际化



3.8.2. 事件



3.8.3. 底层资源的访问



3.8.4. ApplicationContext在WEB应用中的实例化



3.9. 粘合代码和可怕的singleton



3.9.1. 使用Singleton-helper类



4. 资源



4.1. 简介



4.2. Resource接口



4.3. 内置 Resource 实现



4.3.1. UrlResource



4.3.2. ClassPathResource



4.3.3. FileSystemResource



4.3.4. ServletContextResource



4.3.5. InputStreamResource



4.3.6. ByteArrayResource



4.4. ResourceLoader



4.5. ResourceLoaderAware接口



4.6. 把Resource作为属性来配置



4.7. Applicationcontext 和Resource 路径



4.7.1. 构造application context



4.7.1.1. 创建 ClassPathXmlApplicationContext 实例 - 简介



4.7.2. Applicationcontext构造器中资源路径的通配符



4.7.2.1. Ant风格的pattern



4.7.2.2. classpath*:前缀



4.7.2.3. 其他关于通配符的说明



4.7.3. FileSystemResource提示



5. 校验,数据绑定,BeanWrapper,与属性编辑器



5.1. 简介



5.2. 使用Spring的Validator接口进行校验



5.3. 从错误代码到错误信息



5.4. Bean处理和BeanWrapper



5.4.1. 设置和获取属性值以及嵌套属性



5.4.2. 内建的PropertyEditor实现



5.4.2.1. 注册用户自定义的PropertyEditor



6. 使用Spring进行面向切面编程(AOP)



6.1. 简介



6.1.1. AOP概念



6.1.2. SpringAOP的功能和目标



6.1.3. Spring的AOP代理



6.2. @AspectJ支持



6.2.1. 启用@AspectJ支持



6.2.2. 声明一个切面



6.2.3. 声明一个切入点(pointcut)



6.2.3.1. 切入点指定者的支持



6.2.3.2. 合并切入点表达式



6.2.3.3. 共享常见的切入点(pointcut)定义



6.2.3.4. 示例



6.2.4. 声明通知



6.2.4.1. 前置通知(Before advice)



6.2.4.2. 返回后通知(After returning advice)



6.2.4.3. 抛出后通知(After throwing advice)



6.2.4.4. 后通知(After (finally) advice)



6.2.4.5. 环绕通知(Around Advice)



6.2.4.6. 通知参数(Advice parameters)



6.2.4.7. 通知(Advice)顺序



6.2.5. 引入(Introductions)



6.2.6. 切面实例化模型



6.2.7. 例子



6.3. Schema-basedAOP support



6.3.1. 声明一个切面



6.3.2. 声明一个切入点



6.3.3. 声明通知



6.3.3.1. 通知(Advice)



6.3.3.2. 返回后通知(After returning advice)



6.3.3.3. 抛出异常后通知(After throwing advice)



6.3.3.4. 后通知(After (finally) advice)



6.3.3.5. 通知



6.3.3.6. 通知参数



6.3.3.7. 通知顺序



6.3.4. 引入



6.3.5. 切面实例化模型



6.3.6. Advisors



6.3.7. 例子



6.4. AOP声明风格的选择



6.4.1. Spring AOP还是完全用AspectJ?



6.4.2. Spring AOP中使用@AspectJ还是XML?



6.5. 混合切面类型



6.6. 代理机制



6.7. 编程方式创建@AspectJ代理



6.8. 在Spring应用中使用AspectJ



6.8.1. 在Spring中使用AspectJ来为domainobject进行依赖注入



6.8.1.1. @Configurableobject的单元测试



6.8.1.2. 多application context情况下的处理



6.8.2. Spring中其他的AspectJ切面



6.8.3. 使用Spring IoC来配置AspectJ的切面



6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW)



6.9. 其它资源



7. Spring AOP APIs



7.1. 简介



7.2. Spring中的切入点API



7.2.1. 概念



7.2.2. 切入点实施



7.2.3. AspectJ切入点表达式



7.2.4. 便利的切入点实现



7.2.4.1. 静态切入点



7.2.4.2. 动态切入点



7.2.5. 切入点的基类



7.2.6. 自定义切入点



7.3. Spring的通知API



7.3.1. 通知的生命周期



7.3.2. Spring里的通知类型



7.3.2.1. 拦截around通知



7.3.2.2. 前置通知



7.3.2.3. 异常通知



7.3.2.4. 后置通知



7.3.2.5. 引入通知



7.4. Spring里的advisor(Advisor) API



7.5. 使用ProxyFactoryBean创建AOP代理



7.5.1. 基础



7.5.2. JavaBean属性



7.5.3. 基于JDK和CGLIB的代理



7.5.4. 对接口进行代理



7.5.5. 对类进行代理



7.5.6. 使用“全局”advisor



7.6. 简化代理定义



7.7. 使用ProxyFactory通过编程创建AOP代理



7.8. 操作被通知对象



7.9. 使用“自动代理(autoproxy)”功能



7.9.1. 自动代理bean定义



7.9.1.1. BeanNameAutoProxyCreator



7.9.1.2. DefaultAdvisorAutoProxyCreator



7.9.1.3. AbstractAdvisorAutoProxyCreator



7.9.2. 使用元数据驱动的自动代理



7.10. 使用TargetSources



7.10.1. 热交换目标源



7.10.2. 池化目标源



7.10.3. 原型目标源



7.10.4. ThreadLocal目标源



7.11. 定义新的通知类型



7.12. 更多资源



8. 测试



8.1. 简介



8.2. 单元测试



8.3. 集成测试



8.3.1. Context管理和缓存



8.3.2. 测试fixture的依赖注入



8.3.3. 事务管理



8.3.4. 方便的变量



8.3.5. 示例



8.3.6. 运行集成测试



8.4. 更多资源



II. 中间层数据访问



9. 事务管理



9.1. 简介



9.2. 动机



9.3. 关键抽象



9.4. 使用资源同步的事务



9.4.1. 高层次方案



9.4.2. 低层次方案



9.4.3. TransactionAwareDataSourceProxy



9.5. 声明式事务管理



9.5.1. 理解Spring的声明式事务管理实现



9.5.2. 第一个例子



9.5.3. 回滚



9.5.4. 为不同的bean配置不同的事务语义



9.5.5. <tx:advice/>有关的设置



9.5.6. 使用 @Transactional



9.5.6.1. @Transactional有关的设置



9.5.7. 插入事务操作



9.5.8. 结合AspectJ使用 @Transactional



9.6. 编程式事务管理



9.6.1. 使用 TransactionTemplate



9.6.2. 使用 PlatformTransactionManager



9.7. 选择编程式事务管理还是声明式事务管理



9.8. 与特定应用服务器集成



9.8.1. BEAWebLogic



9.8.2. IBMWebSphere



9.9. 公共问题的解决方案



9.9.1. 对一个特定的 DataSource 使用错误的事务管理器



9.10. 更多的资源



10. DAO支持



10.1. 简介



10.2. 一致的异常层次



10.3. 一致的DAO支持抽象类



11. 使用JDBC进行数据访问



11.1. 简介



11.1.1. SpringJDBC包结构



11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理



11.2.1. JdbcTemplate类



11.2.2. NamedParameterJdbcTemplate类



11.2.3. SimpleJdbcTemplate类



11.2.4. DataSource接口



11.2.5. SQLExceptionTranslator接口



11.2.6. 执行SQL语句



11.2.7. 执行查询



11.2.8. 更新数据库



11.3. 控制数据库连接



11.3.1. DataSourceUtils类



11.3.2. SmartDataSource接口



11.3.3. AbstractDataSource类



11.3.4. SingleConnectionDataSource类



11.3.5. DriverManagerDataSource类



11.3.6. TransactionAwareDataSourceProxy类



11.3.7. DataSourceTransactionManager类



11.4. 用Java对象来表达JDBC操作



11.4.1. SqlQuery类



11.4.2. MappingSqlQuery类



11.4.3. SqlUpdate类



11.4.4. StoredProcedure类



11.4.5. SqlFunction类



12. 使用ORM工具进行数据访问



12.1. 简介



12.2. Hibernate



12.2.1. 资源管理



12.2.2. 在Spring的application context中创建SessionFactory



12.2.3. HibernateTemplate



12.2.4. 不使用回调的基于Spring的DAO实现



12.2.5. 基于Hibernate3的原生API实现DAO



12.2.6. 编程式的事务划分



12.2.7. 声明式的事务划分



12.2.8. 事务管理策略



12.2.9. 容器资源 vs 本地资源



12.2.10. 在应用服务器中使用Hibernate的注意点



12.3. JDO



12.3.1. 建立PersistenceManagerFactory



12.3.2. JdoTemplate和JdoDaoSupport



12.3.3. 基于原生的JDO API实现DAO



12.3.4. 事务管理



12.3.5. JdoDialect



12.4. OracleTopLink



12.4.1. SessionFactory抽象层



12.4.2. TopLinkTemplate和 TopLinkDaoSupport



12.4.3. 基于原生的TopLink API的DAO实现



12.4.4. 事务管理



12.5. iBATISSQL Maps



12.5.1. iBATIS 1.x和2.x的概览与区别



12.5.2. iBATIS SQLMaps 1.x



12.5.2.1. 创建SqlMap



12.5.2.2. 使用 SqlMapTemplate 和 SqlMapDaoSupport



12.5.3. iBATIS SQLMaps 2.x



12.5.3.1. 创建SqlMapClient



12.5.3.2. 使用 SqlMapClientTemplate 和 SqlMapClientDaoSupport



12.5.3.3. 基于原生的iBATIS API的DAO实现



12.6. JPA



12.6.1. 在Spring环境中建立JPA



12.6.1.1. LocalEntityManagerFactoryBean



12.6.1.2. LocalContainerEntityManagerFactoryBean



12.6.1.3. 处理多个持久化单元



12.6.2. JpaTemplate和 JpaDaoSupport



12.6.3. 基于原生的JPA实现DAO



12.6.4. 异常转化



12.6.5. 事务管理



12.6.6. JpaDialect



III. Web



13. Web框架



13.1. 介绍



13.1.1. 与其他web框架的集成



13.1.2. SpringWeb MVC框架的特点



13.2. DispatcherServlet



13.3. 控制器



13.3.1. AbstractController和 WebContentGenerator



13.3.2. 其它的简单控制器



13.3.3. MultiActionController



13.3.4. 命令控制器



13.4. 处理器映射(handler mapping)



13.4.1. BeanNameUrlHandlerMapping



13.4.2. SimpleUrlHandlerMapping



13.4.3. 拦截器(HandlerInterceptor)



13.5. 视图与视图解析



13.5.1. 视图解析器



13.5.2. 视图解析链



13.5.3. 重定向(Rediret)到另一个视图



13.5.3.1. RedirectView



13.5.3.2. redirect:前缀



13.5.3.3. forward:前缀



13.6. 本地化解析器



13.6.1. AcceptHeaderLocaleResolver



13.6.2. CookieLocaleResolver



13.6.3. SessionLocaleResolver



13.6.4. LocaleChangeInterceptor



13.7. 使用主题



13.7.1. 简介



13.7.2. 如何定义主题



13.7.3. 主题解析器



13.8. Spring对分段文件上传(multipart file upload)的支持



13.8.1. 介绍



13.8.2. 使用MultipartResolver



13.8.3. 在表单中处理分段文件上传



13.9. 使用Spring的表单标签库



13.9.1. 配置标签库



13.9.2. form标签



13.9.3. input标签



13.9.4. checkbox标签



13.9.5. radiobutton标签



13.9.6. password标签



13.9.7. select标签



13.9.8. option标签



13.9.9. options标签



13.9.10. textarea标签



13.9.11. hidden标签



13.9.12. errors标签



13.10. 处理异常



13.11. 惯例优先原则(convention over configuration)



13.11.1. 对控制器的支持: ControllerClassNameHandlerMapping



13.11.2. 对模型的支持:ModelMap (ModelAndView)



13.11.3. 对视图的支持: RequestToViewNameTranslator



13.12. 其它资源



14. 集成视图技术



14.1. 简介



14.2. JSP和JSTL



14.2.1. 视图解析器



14.2.2. 'Plain-old'JSPs versus JSTL 'Plain-old' JSP与JSTL



14.2.3. 帮助简化开发的额外的标签



14.3. Tiles



14.3.1. 需要的资源



14.3.2. 如何集成Tiles



14.3.2.1. InternalResourceViewResolver



14.3.2.2. ResourceBundleViewResolver



14.4. Velocity和FreeMarker



14.4.1. 需要的资源



14.4.2. Context配置



14.4.3. 创建模板



14.4.4. 高级配置



14.4.4.1. velocity.properties



14.4.4.2. FreeMarker



14.4.5. 绑定支持和表单处理



14.4.5.1. 用于绑定的宏



14.4.5.2. 简单绑定



14.4.5.3. 表单输入生成宏



14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML



14.5. XSLT



14.5.1. 写在段首



14.5.1.1. Bean定义



14.5.1.2. 标准MVC控制器代码



14.5.1.3. 把模型数据转化为XML



14.5.1.4. 定义视图属性



14.5.1.5. 文档转换



14.5.2. 小结



14.6. 文档视图(PDF/Excel)



14.6.1. 简介



14.6.2. 配置和安装



14.6.2.1. 文档视图定义



14.6.2.2. Controller代码



14.6.2.3. Excel视图子类



14.6.2.4. PDF视图子类



14.7. JasperReports



14.7.1. 依赖的资源



14.7.2. 配置



14.7.2.1. 配置ViewResolver



14.7.2.2. 配置View



14.7.2.3. 关于报表文件



14.7.2.4. 使用 JasperReportsMultiFormatView



14.7.3. 构造ModelAndView



14.7.4. 使用子报表



14.7.4.1. 配置子报表文件



14.7.4.2. 配置子报表数据源



14.7.5. 配置Exporter的参数



15. 集成其它Web框架



15.1. 简介



15.2. 通用配置



15.3. JavaServerFaces



15.3.1. DelegatingVariableResolver



15.3.2. FacesContextUtils



15.4. Struts



15.4.1. ContextLoaderPlugin



15.4.1.1. DelegatingRequestProcessor



15.4.1.2. DelegatingActionProxy



15.4.2. ActionSupport类



15.5. Tapestry



15.5.1. 注入 Spring 托管的 beans



15.5.1.1. 将 Spring Beans 注入到 Tapestry 页面中



15.5.1.2. 组件定义文件



15.5.1.3. 添加抽象访问方法



15.5.1.4. 将 Spring Beans 注入到 Tapestry 页面中 -Tapestry 4.0+ 风格



15.6. WebWork



15.7. 更多资源



16. Portlet MVC框架



16.1. 介绍



16.1.1. 控制器 - MVC中的C



16.1.2. 视图 - MVC中的V



16.1.3. Web作用范围的Bean



16.2. DispatcherPortlet



16.3. ViewRendererServlet



16.4. 控制器



16.4.1. AbstractController和PortletContentGenerator



16.4.2. 其它简单的控制器



16.4.3. Command控制器



16.4.4. PortletWrappingController



16.5. 处理器映射



16.5.1. PortletModeHandlerMapping



16.5.2. ParameterHandlerMapping



16.5.3. PortletModeParameterHandlerMapping



16.5.4. 增加 HandlerInterceptor



16.5.5. HandlerInterceptorAdapter



16.5.6. ParameterMappingInterceptor



16.6. 视图和它们的解析



16.7. Multipart文件上传支持



16.7.1. 使用PortletMultipartResolver



16.7.2. 处理表单里的文件上传



16.8. 异常处理



16.9. Portlet应用的部署



IV. 整合



17. 使用Spring进行远程访问与Web服务



17.1. 简介



17.2. 使用RMI暴露服务



17.2.1. 使用 RmiServiceExporter 暴露服务



17.2.2. 在客户端链接服务



17.3. 使用Hessian或者Burlap通过HTTP远程调用服务



17.3.1. 为Hessian配置DispatcherServlet



17.3.2. 使用HessianServiceExporter暴露你的bean



17.3.3. 客户端连接服务



17.3.4. 使用Burlap



17.3.5. 对通过Hessian或Burlap暴露的服务使用HTTP基础认证



17.4. 使用HTTP调用器暴露服务



17.4.1. 暴露服务对象



17.4.2. 在客户端连接服务



17.5. Web服务



17.5.1. 使用JAXI-RPC暴露服务



17.5.2. 访问Web服务



17.5.3. 注册bean映射



17.5.4. 注册自己的处理方法



17.5.5. 使用XFire来暴露Web服务



17.6. 对远程接口不提供自动探测



17.7. 在选择这些技术时的一些考虑



18. Enterprise JavaBean(EJB)集成



18.1. 简介



18.2. 访问EJB



18.2.1. 概念



18.2.2. 访问本地的无状态Session Bean(SLSB)



18.2.3. 访问远程SLSB



18.3. 使用Spring提供的辅助类实现EJB组件



19. JMS



19.1. 简介



19.2. 使用Spring JMS



19.2.1. JmsTemplate



19.2.2. 连接工厂



19.2.3. (消息)目的地管理



19.2.4. 消息侦听容器



19.2.4.1. SimpleMessageListenerContainer



19.2.4.2. DefaultMessageListenerContainer



19.2.4.3. ServerSessionMessageListenerContainer



19.2.5. 事务管理



19.3. 发送一条消息



19.3.1. 使用消息转换器



19.3.2. SessionCallback和ProducerCallback



19.4. 接收消息



19.4.1. 同步接收



19.4.2. 异步接收 - 消息驱动的POJOs



19.4.3. SessionAwareMessageListener接口



19.4.4. MessageListenerAdapter



19.4.5. 事务中的多方参与



20. JMX



20.1. 介绍



20.2. 输出bean到JMX



20.2.1. 创建一个MBeanServer



20.2.2. 复用现有的MBeanServer



20.2.3. MBean的惰性初始化



20.2.4. MBean的自动注册



20.2.5. 控制注册行为



20.3. 控制bean的管理接口



20.3.1. MBeanInfoAssembler接口



20.3.2. 使用源码级元数据



20.3.3. 使用JDK 5.0注解



20.3.4. 源代码级的元数据类型



20.3.5. 接口AutodetectCapableMBeanInfoAssembler



20.3.6. 用Java接口定义管理接口



20.3.7. 使用MethodNameBasedMBeanInfoAssembler



20.4. 控制bean的 ObjectName



20.4.1. 从Properties中读取ObjectName



20.4.2. 使用 MetadataNamingStrategy



20.5. JSR-160连接器



20.5.1. 服务器端连接器



20.5.2. 客户端连接器