| 语言 | 格式 | 评分 |
|---|---|---|
英语 | .txt | 3 |
| 摘要 | ||
文档详细记录了Spring Framework 1.2.0版本的主要变更,包括对AOP模块的增强,如引入AbstractTraceInterceptor和CustomizableTraceInterceptor;对Bean处理的优化,如BeanDefinitionVisitor的重构和BeanWrapperImpl的功能扩展;对上下文和数据访问的改进,如LocaleContextHolder的线程本地化处理和JdbcTemplate的execute方法添加;以及对Web模块的增强,如新增SimplerMappingExceptionResolver和 ModelAndViewDefiningException。此外,还包括对XML配置和BeanFactoryPostProcessor的改进。 | ||
| AI总结 | ||
### Spring Framework 1.2.0 变更日志总结
#### 1.2.0 版本(2005年5月13日)
- **AOP 包**:
- 引入 `AbstractTraceInterceptor` 作为所有跟踪拦截器的超类,支持静态或动态日志记录。
- 将 `TraceInterceptor` 折旧,推荐使用 `SimpleTraceInterceptor`,它是 `AbstractTraceInterceptor` 的子类。
- 重新设计 `PerformanceMonitorInterceptor` 和 `JamonPerformanceMonitorInterceptor` 为 `AbstractTraceInterceptor` 的子类。
- 重新设计 `DebugInterceptor` 为 `SimpleTraceInterceptor` 的子类。
- 添加 `CustomizableTraceInterceptor`,支持基于模式的进入和退出消息,并带有占位符。
- 所有跟踪拦截器现在在 Commons Logging 的 `trace` 级别记录日志,而不是 `info` 或 `debug`。
- **Beans 包**:
- 从 `PropertyPlaceholderConfigurer` 中提取 `BeanDefinitionVisitor`,使其可用于其他 bean 定义遍历操作。
- `ConstructorArgumentValues` 现在将 `ValueHolder` 作为列表存储,保留定义顺序。
- `ConstructorArgumentValues` 提供 `get(Generic)ArgumentValue` 方法,排除已使用的 `ValueHolder`。
- `AbstractAutowireCapableBeanFactory` 现在按定义顺序应用相同类型的通用构造函数参数。
- 从 `AbstractAutowireCapableBeanFactory` 中提取 `BeanDefinitionValueResolver` 辅助类。
- `AbstractAutowireCapableBeanFactory` 排除 CGLIB 定义的 bean 属性(方法注入)的依赖检查。
- 重新设计 `ResourceEntityResolver` 仅依赖于 `ResourceLoader`,并将其移动到 `beans.factory.xml` 包。
- 将资源编辑器注册从 `AbstractApplicationContext` 提取到 `ConfigurableBeanFactoryUtils` 辅助类。
- 修复 `DefaultXmlBeanDefinitionParser` 以正确解析 XML 映射条目中的 `null` 键。
- **Context 包**:
- `LocaleContextHolder` 现在使用 `InheritableThreadLocal`,并将线程绑定的 `Locale` 暴露给子线程。
- 修复 `GenericApplicationContext`,使其在调用 `setParent` 时正确传播内部父 `BeanFactory`。
- `GenericApplicationContext` 检测传入的 `ResourceLoader` 是否实现 `ResourcePatternResolver`,并使用它。
- **DAO 包**:
- 将 `IncorrectResultSizeDataAccessException` 重新设计为 `DataRetrievalFailureException` 的子类。
- **JCA 包**:
- 移除带有 `allowSynchronization` 标志的 `getConnection` 方法,将其移至事务管理器实现路径。
- `PagedListHolder` 及其包含的 `PageableSortDefinition` 现在实现 `Serializable`,适用于分布式会话。
- 添加 `previousPage` 和 `nextPage` 方便方法到 `PagedListHolder`。
- **Web 包**:
- `DataBinder` 和 `ServletRequestDataBinder` 现在包含 `BindException`,而不是继承它。
- `HandlerAdapter`、`HandlerMapping` 和 `ViewResolver` 接口不再需要 `ApplicationContextAware`。
- `View` 接口不再需要 `addStaticAttribute` 和 `getName` 方法。
- `HandlerAdapter` 和 `Controller` 现在可以抛出任何异常,而不仅仅是 `ServletException` 和 `IOException`。
- 添加 `SimplerMappingExceptionResolver` 实现,用于通过类名或消息映射到视图名称。
- 引入 `ModelAndViewDefiningException`,在处理程序处理期间抛出以转发到特定错误页面。
- 重命名 `BaseCommandController` 的 `setBeanName` 方法为 `setCommandName`,保留 `setBeanName` 为折旧方法。
- 重命名 `BaseCommandController` 的 `userObject` 方法为 `getCommand`。
- 在 `AbstractWizardFormController` 中检查 `.x` 和 `.y` 作为提交图像的后缀。
- 将 `FileNameViewController` 从 Tiles 示例移动到 `org.springframework.web.servlet.mvc` 包。
- `XMLViewResolver` 和 `ResourceBundleViewResolver` 的视图工厂现在是应用程序上下文的子项。
- 在 `AbstractView` 中添加 `attributesMap` 属性,用于通过 `Map` 设置属性值,例如 bean 引用。
- 重命名 `InternalResourceView` 的 `exposeModelsAsRequestAttributes` 方法为 `exposeModelAsRequestAttributes`。
- 如果处于包含请求中,检查包含路径而不是原始请求路径。
- 如果已经在包含请求中,执行另一次包含而不是转发到 `InternalResourceView`。
- 修复 VelocityView 中的调试日志语句以避免空指针异常。
- 添加标签库 URI `http://www.springframework.org/tags`,用于自动检测 `spring.tld` 在 `spring.jar` 的 `META-INF` 中。
---
#### 1.0 M2 版本(2003年10月23日)
- 引入可选依赖检查,确保在使用之前设置所有 bean 属性。
- 添加非默认的 `automwire` 功能,允许 bean 工厂自动配置依赖。
- 用 `PropertyValuesProviderFactoryBean` 替换 `FactoryBean` 接口的 `getPropertyValues()` 方法。
- 添加 `BeanPostProcessor` 接口,并在 `AbstractBeanFactory` 和 `AbstractApplicationContext` 中支持它。
- 将 `BeanFactoryPostProcessor` 从 `context.support` 移动到 `beans.factory.support` 包。
- 将 `AbstractBeanFactory` 的循环引用检测重构为 eager singleton 缓存。
- 重新定义 `redefinedXmlBeanFactory` 的 `ref` 标签,支持 `local` 和 `bean`,`external` 为折旧。
- 允许 XML bean 定义中的嵌套映射,例如 `map` 标签作为 `entry` 标签的子标签。
- 重新设计 `AopUtils` 和 AOP ProxyFactory 配置选项路径。
- 修复 `BindException` 的 `getFieldValue` 实现,使其正确应用嵌套路径到字段错误检查。
---
#### 1.1 RC1 版本(2004年7月28日)
- **AOP 包**:
- 将 `addInterceptor`、`addThrowsAdvice` 和其他接受 `Advice` 子类型的 `Advised` 方法折旧,建议使用 `addAdvice` 等方法。
- 添加 `ProxyConfig` 的 `opaque` 属性,以防止代理被强制转换为 `Advised`,从而保护配置。
- 修复调试日志语句,避免调用目标的 `toString` 方法(例如在 Axis 代理上不支持)。
- 如果所有顾问和目标源都是 `Serializable`,则 AOP 代理现在也是 `Serializable`。
- 大多数框架切点、建议和顾问现在都是 `Serializable`。
- 添加 `ReflectiveMethodInvocation` 的 `invocableClone()` 方法,允许多次调用 `proceed`。
- 在 `Pointcuts` 中添加 `SETTERS` 和 `GETTERS` 常量。
- 改进 `NameMatchMethodPointcut` 用于编程使用。
- 将 `RegexpMethodPointcut` 折旧,建议使用 `Perl5RegexpMethodPointcut` 支持其他正则表达式语法。
- **Beans 包**:
- `BeanUtils` 的 `instantiateClass` 方法尝试设置不可访问的构造函数的访问权限。
- 从 `BeanWrapper` 中提取 `PropertyController` 基础接口。
- `BeanWrapperImpl` 现在支持键中的点,例如 `map[my.key]`。
- `BeanWrapperImpl` 的 `isReadableProperty` 和 `isWritableProperty` 现在正确检查索引和映射属性。
- 修复 `BeanWrapperImpl`,使其在缓存嵌套 `BeanWrapper` 时检查属性值的变化。
- 改进 `BeanWrapperImpl`,使其在应用自定义编辑器时,严格应用于数组/集合或其元素。
- 改进 `BeanWrapperImpl`,使其在需要时自动将值转换为包含单个组件的数组。
- 添加 `ServletContextAware` 接口,供应用程序 bean 使用,由 Web 应用程序上下文检测。
- 重新设计 `CommonsMultipartResolver` 和 `CosMultipartResolver` 以实现 `ServletContextAware`。
---
#### 1.0 RC2 版本(2004年3月1日)
- **AOP 包**:
- 简化 `Advisor` 接口层次结构,将 `Advisor` 子接口减少为 `PointcutAdvisor` 和 `IntroductionAdvisor`。
- 将基于元数据的自动代理支持和测试调整为使用 Commons Attributes 快照(2004年1月15日)。
- **Beans 包**:
- 修复 `PropertyValue` 的 `equals` 实现,并添加对应的 `hashCode` 实现。
- 在 `BeanWrapperImpl` 中将自定义属性编辑器应用于转换为字符串数组的值。
- `CustomNumberEditor` 现在支持 `Short`、`BigInteger` 和 `BigDecimal`。
- 将 `AbstractBeanFactory` 重构为 `AbstractBeanFactory` 和 `AbstractAutoWireCapableBeanFactory`。
- 重新设计 `BeanFactoryLocator` 的异常处理。
- 重命名 `SimpleJndiBeanFactoryLocator` 为 `JndiBeanFactoryLocator`。
- 添加 `PropertyPlaceholderConfigurer` 的 `systemPropertiesMode` 设置,值为 `never`、`fallback` 和 `override`。
- 添加 `PreferencesPlaceholderConfigurer`,能够通过 J2SE 1.4 Preferences 解析占位符。
- 添加 `CustomEditorConfigurer`,用于在新鲜间隔内注册自定义 `PropertyEditor`。
- 修复 `DefaultPropertiesPersister`,使其正确处理空属性值,特别是在指定编码时读取。
- **Validation 包**:
- 在 `Errors` 接口和 `BindException` 中添加无默认消息的 `reject` 和 `rejectValue` 方法重载。
- **Web 包**:
- `Log4jWebConfigurer` 支持 `log4jExposeWebAppRoot` 上下文参数,用于关闭对系统属性的暴露。
- 在 `RequestUtils` 中添加重载的 `getXxxParameter` 方法,返回包装类型或 `null`(而不是原始类型)。
- 添加 `ServletContextPropertyPlaceholderConfigurer` 的 `contextOverride` 选项,允许 Web.xml 覆盖本地设置。
- 添加 `ServletContextPropertyPlaceholderConfigurer` 的 `searchContextAttributes` 选项,解析上下文属性。
- 在 `ModelAndView` 中添加 `clear` 和 `isEmpty` 方法,允许清除 `ModelAndView` 对象的视图。
- `DispatcherServlet` 现在仅在 `ModelAndView` 对象非空时尝试渲染。
- 重新设计 `DispatcherServlet` 的默认回退策略,从属性文件中读取默认策略名称。
- `DispatcherServlet` 不再覆盖 `doHead` 方法,而是利用 HttpServlet 的默认 `HEAD` 处理(通过 `doGet`)。
- 从 `DispatcherServlet` 的 `render` 实现中提取受保护的 `resolveViewName` 方法。
- 将 `HEAD` 添加到 `WebContentGenerator` 的默认支持方法集中(除了 `GET` 和 `POST`)。
- 在 `SimpleFormController` 中添加带有 `request`、`response`、`errors` 和控制模型的重载 `showForm` 方法。
- 在 `AbstractWizardFormController` 中添加 `suppressValidation` 调用,类似于 `SimpleFormController` 的行为。
- 添加 `SimpleServletHandlerAdapter`,支持实现 `Servlet` 接口的处理程序在 `DispatcherServlet` 中使用。
- 添加 `SimpleServletPostProcessor`,在实现 `Servlet` 接口的 bean 上应用初始化和销毁回调。
- 添加对声明性导出参数配置的支持。
- 从 `AbstractJasperReportsView` 中提取 `AbstractJasperReportsSingleFormatView`。
- 添加 `JasperReportsMultiFormatView`,允许通过模型中的辨别器动态指定输出格式。
- Spring 的 JSP 标签中的 JSP EL 表达式现在使用 JSP 2.0 ExpressionEvaluator 解析(在 JSP 2.0 环境中)。
- 将 `spring:transform` 标签的 `value` 属性从 `String` 更改为 `Object`,以允许通过 JSP 2.0 解决。
---
#### 1.1.4 版本(2005年1月31日)
- **AOP 包**:
- 在 `StaticMethodMatcherPointcut` 中添加 `setClassFilter` 方法,允许覆盖默认的 `ClassFilter.TRUE`。
- 从 `AbstractPrototypeBasedTargetSource` 中提取 `AbstractBeanFactoryBasedTargetSource` 超类。
- 添加 `LazyInitTargetSource`,在第一次调用时惰性访问单例。
- 修复 `AbstractAdvisorAutoProxyCreator`,使其在适当的情况下匹配切点(例如正则表达式)对接口方法。
- **Beans 包**:
- 修复 `BeanWrapperImpl`,允许自定义 `PropertyEditor` 在设置值之前生效。
- 移除 `AbstractXmlUiApplicationContext` 和 `StaticUiApplicationContext` 基类(使用 `UiApplicationContextUtils`)。
- **Util 包**:
- 移除 `ClassLoaderUtils` 中的包路径实用方法。
- 添加 `MethodInvoker`,作为 `MethodInvocationFactoryBean` 和 `MethodInvocationJobDetailFactoryBean` 的基类。
- **Validation 包**:
- 在 `DataBinder` 中添加 `allowedFields` 属性,避免意外修改请求参数。
- 添加可覆盖的 `isAllowed` 方法到 `DataBinder`。
- **Web 包**:
- 在 `ParameterMethodNameResolver` 中添加 `defaultMethod` 属性。
- 在 `VelocityView` 中添加 `numberToolAttribute`,用于暴露基于 locales 的 `NumberTool`(来自 Velocity Tools 1.1)。
- 在 `VelocityView` 中添加 `velocityFormatter` 属性,用于暴露 Velocity 的 `VelocityFormatter`。
- 放宽 `AbstractXsltView` 中的异常处理,允许 null 模型/null 根标签名称。
- 添加子类可以创建的样式表参数到 `AbstractXsltView`。
- `AbstractPdfView` 现在正确设置响应的内容类型。
---
#### 1.0 RC1 版本(2004年2月11日)
- **AOP 包**:
- 重写建议操作方法在 `AdvisedSupport` 上。
- `SimpleIntroductionAdvisor` 重命名为 `DefaultInterceptionIntroductionAdvisor`。
- 添加 `AfterReturning` 建议以完成 AOP 建议类型。
- `RegexpMethodPointcut` 现在支持多个模式。
- 添加 `NameMatchMethodPointcut` 和 `NameMatchMethodPointcutAroundAdvisor`,用于简单的 `xxx*/*/*xxx` 名称匹配。
- 将 `AbstractAutoProxyCreator` 的 `interceptors` 属性重命名为 `interceptorNames`,以正确处理原型。
- 添加 `ConcurrencyThrottleInterceptor`,阻止调用如果指定的并发限制已达到。
- **Beans 包**:
- 移除 `BeanWrapper` 中的 `PropertyEditorManager` 注册,完全依赖于本地注册。
- 移除 `BeanWrapper` 中的 `PropertyValuesValidator` 支持。
- 移除 `BeanWrapper` 的 `newWrapperInstance` 方法。
- 移除 `AbstractVetoableChangeListener` 从 beans 包。
- 简化 `BeanWrapperImpl` 的 `PropertyAccessException` 处理。
- 改进 `BeanWrapperImpl` 的 `TypeMismatchException` 消息,以处理列表或数组条目。
- 将 `SortDefinition` 类移动到新的 `beans.support` 包。
- 将 `PagedListHolder` 类从 `util` 包移动到 `beans.support`,以移除循环包依赖。
- 重新设计 `BeanPostProcessor` 接口为 `postProcessBeforeInitialization` 和 `postProcessAfterInitialization`。
- 重新定义 `BeanFactory` 的生命周期方法顺序,现在在 `afterPropertiesSet` 之前调用 `setBeanFactory` 等。
- 添加 `BeanCreationException`,在 bean 创建过程中出现任何错误时抛出。
- 添加 `autodetect` 自动注入模式,通过类的反省选择 `constructor` 或 `byType`。
- 重新设计 `AutowireCapableBeanFactory` 的 `autowire` 和 `autowireConstructor` 方法为通用的 `autowire` 方法。
- 添加对 Spring-aware Tiles 组件控制器的支持。
- 添加 `AbstractPdfView` 中的自定义功能。
---
#### 0.9.1 版本(2003年8月8日)
- 修订发行 jar 文件(`spring-beans`、`spring-jdbc`、`spring-full`)。
- 修复 `XMLBeanFactory` 中的错误日志记录。
- 支持 XML bean 定义包含通过 XML 实体。
- Spring bean 定义 DTD 现在允许 map 条目为列表。
- 引入 `init-method` 属性用于 XML bean 定义。
- 添加 `BeanFactoryPostProcessor` 钩子以覆盖 bean 定义值。
- 重新设计 `PropertyResourceConfigurer` 为 `BeanFactoryPostProcessor`。
- 重新设计简单的 JNDI 实现。
- 支持执行上下文在 `SqlQuery` 层级。
- 激进初始化 `JdbcTemplate` 中的异常翻译器。
- 修复 `StoredProcedure` 事务参与。
- 将 `DataSourceTransactionManager` 移动到 `jdbc.datasource` 包。
- 重新设计 `JDO LocalPersistenceManagerFactoryBean` 以使用 bean 定义设置。
- 重新设计 `Hibernate LocalSessionFactoryBean` 以使用 bean 定义设置。
- 支持使用 Spring 配置的 DataSource 进行 Hibernate。
- 支持 Hibernate 实体拦截器。
- 修复 `HibernateTransactionManager` 的事务日志记录。
- 添加新的 HibernateTemplate 方便方法用于单步操作。
- 新增通用基类用于 JDBC、Hibernate 和 JDO DAO。
- 支持只读事务。
- 重新设计 `TransactionInterceptor` 配置选项。
- `TransactionInterceptor` 现在没有默认策略。
- 更新 AOP 框架以使用当前的 AOP 联盟接口。
- 可选 CGLIB 支持在 AOP 框架中(以代理类和接口)。
- 区分静态和动态方法切点。
- 新增正则表达式切点。
- 重新设计 EJB 支持类以访问 `BeanFactory`。
- 新增 `BindInitializer` 支持在 `BindUtils` 中。
- 重新设计 `VelocityConfigurer` 为 `BeanFactoryPostProcessor`。
- 支持 Ant 样式路径匹配在 Web 框架中。
- 支持 JSP 表达式语言在标签实现中。
- 建议使用 `spring:` 作为标签前缀(而不是 `i21:`)。
- 将示例中的 `PagedList` 转换为完整的 `Countries`。
- 新增 Petclinic 教程。
- 新增 MVC 分步教程。
- 新增文章《The Spring Framework - A Lightweight Container》。
- 新增文章《Container Resources vs Local Resources》。
---
#### 0.9 版本(2003年6月25日)
- 首次公开发行,基于之前的 0.8 CVS 快照。
- 使用 Commons Logging 进行日志记录。
- 支持 Log4J 配置。
- 修订 bean 定义 XML 格式,带有 DTD。
- 支持列表、映射和属性在 XML bean 定义中。
- 支持层次 bean 工厂。
- 支持自定义属性编辑器。
- 多种现成的属性编辑器,例如日期、数字等。
- 引入 `FactoryBean` 接口,替代自定义 bean 定义。
- `FactoryBean` 基于资源定义的 DataSource 等。
- 重新设计简单的 DataSource 实现。
- 新增 `JdbcTemplate` 的错误代码异常翻译器。
- 新增 `DataFieldMaxValueIncrementer` 支持 JDBC。
- 新增通用事务管理功能。
- 修复 `AbstractPathResolvingPropertyEditor`,避免在 JDK < 1.4 上调用 `StringBuffer.indexOf(String)`。
- `PathMatchingResourcePatternResolver` 现在支持在 jar 文件中匹配路径(`classpath:` 和 `classpath*:`)。
- **JDBC 包**:
- 在 `JdbcTemplate` 中添加 `execute(ConnectionCallback)` 方法,允许在给定的 Connection 上执行任何操作。
- **JNDI 包**:
- 添加可选 `proxyInterface` 属性到 `JndiObjectFactoryBean`,以暴露代理而不是原始对象。
- 添加 `lookupOnStartup` 和 `cache` 属性到 `JndiObjectFactoryBean`,允许在第一次访问时延迟查找等。
- **Mock 包**:
- 实现 `getResourcePaths` 在 `MockServletContext` 中,允许通过正则表达式匹配 `ServletContext` 资源路径。
- **ORM 包**:
- 修复 `HibernateTransactionManager`,使其不预初始化 SQLExceptionTranslator,而是在需要时延迟创建特定的一个。
- `SqlMapClientFactoryBean` 强制 `iBATIS ExternalTransactionConfig` 始终保留原始 auto-commit 值。
- `SqlMapClientFactoryBean` 允许惰性加载和直接 `SqlMapClient` 访问参与 Spring 管理的事务。
- **Remoting 包**:
- 添加 `codebaseUrl` 属性到 `HttpInvokerClientInterceptor`,指定动态类下载的 URL。
- 添加对动态类下载的支持到 `AbstractHttpInvokerRequestExecutor` 及其子类。
- 添加装饰输入/输出流的钩子到 `AbstractHttpInvokerRequestExecutor` 和 `HttpInvokerServiceExporter`。
- **Scheduling 包**:
- 重新设计 `LocalDataSourceConnectionProvider` 以注册 Quartz ConnectionProviders,确保帮助线程关闭。
- **UI 包**:
- 默认启用 VelocityEngineFactory 中的缓存,通过文件系统检查文件时间戳以确定资源状态。
- 添加 `preferFileSystemAccess` 属性到 `VelocityEngineFactory`,以抑制文件系统访问。
- 添加 `preferFileSystemAccess` 属性到 `FreeMarkerConfigurationFactory`,以抑制文件系统访问。
- 添加 `JasperReportsUtils` 以方便使用 JasperReports 渲染 CSV/HTML/PDF/XLS 报告。
- **Util 包**:
- 将 `Log4jConfigurer` 的 `initLogging` 方法修改为仅在显式指定刷新间隔时检查配置文件。
- 将 `LocaleEditor` 的字符串解析提取到 `StringUtils` 的 `parseLocaleString` 方法。
---
以上是对 Spring Framework 各个版本变更的简要总结,涵盖了主要功能的增强、新特性的引入以及关键问题的修复。 | ||
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
60 页请下载阅读 -
文档评分














Spring Framework 1.2.0 Changelog
Spring Framework 1.2.0 Reference