SPRING FRAMEWORK CHANGELOG ========================== http://www.springsource.org Changes in version 3.0.0.RC1 (2009-09-21) ----------------------------------------- * upgraded to AspectJ 1.6.5, Groovy 1.6.3, EHCache 1.6.2, JUnit 4.7, and TestNG 5.10 * introduced early support for JSR-330 "javax.inject" annotations * added default editors for "java.util.Currency" and "java.util.TimeZone" * refined PathMatchingResourcePatternResolver's treatment of non-readable directories * revised AccessControlContext access from BeanFactory * BeanFactory's default type conversion falls back to String constructor on target type * BeanFactory tries to create unknown collection implementation types via default constructor * BeanFactory supports ObjectFactory as a dependency type for @Autowired and @Value * BeanFactory prefers local primary bean to primary bean in parent factory * protected @Autowired method can be overridden with non-annotated method to suppress injection * private @Autowired methods with same signature will be called individually across a hierarchy * support for default "conversionService" bean in an ApplicationContext * MBeanServerFactoryBean returns JDK 1.5 platform MBeanServer for agent id "" (empty String) * changed NamedParameter/SimpleJdbcOperations parameter signatures to accept any Map value type * refined logging in JMS SingleConnectionFactory and DefaultMessageListenerContainer * introduced "ui.format" package as an alternative to PropertyEditors for data binding * introduced initial JSR-303 Bean Validation support in "validation.beanvalidation" package * JSR-303 support for validation of @MVC hander method arguments driven by @Valid annotations * @RequestMapping annotation now supported for annotated interfaces (and JDK proxies) as well * @RequestParam and co support placeholders and expressions in their defaultValue attributes * @Value expressions supported as MVC handler method arguments as well (against request scope) * refined response handling for @ExceptionHandler methods * Jpa/JdoTransactionManager passes resolved timeout into Jpa/JdoDialect's beginTransaction * HibernateJpaDialect applies timeout onto native Hibernate Transaction before begin call * Spring's Hibernate support is now compatible with Hibernate 3.5 beta 1 as well * Spring's JPA support is now fully compatible with JPA 2.0 as in EclipseLink 2.0.0.M7 * SpringJUnit4ClassRunner is now compatible with JUnit 4.5, 4.6, and 4.7 * SpringJUnit4ClassRunner once again supports collective timeouts for repeated tests * deprecated @NotTransactional annotation for test classes in favor of @BeforeTransaction Changes in version 3.0.0.M4 (2009-08-10) ---------------------------------------- * upgraded to JUnit 4.6, TestNG 5.9, and EasyMock 2.5.1 * updated all Spring Framework OSGI manifests to list unversioned imports explicitly * relaxed several OSGi bundle dependencies (optional, extended version ranges) * revised Java 6 checks to test for the presence of specific Java 6 interfaces/classes only * replaced Commons Collections dependency with Spring-provided LinkedCaseInsensitiveMap * case-insensitive Maps and key Sets preserve original casing for introspection/logging * constructor argument type matching supports arrays and simple class names now * XML constructor-arg element allows for specifying a constructor argument by name now * XML import elements with relative resource patterns are supported as well now * introduced non-lenient constructor resolution mode for BeanDefinitions (for RFC-124) * revised DefaultListableBeanFactory's access control when running within a SecurityManager * BeanWrapper and DefaultListableBeanFactory accept a custom ConversionService now * DefaultListableBeanFactory references are serializable now when initialized with an id * scoped proxies are serializable now, for web scopes as well as for singleton beans * injected request/session references are serializable proxies for the current request now * Servlet/Portlet ApplicationContexts use a specific id based on servlet/portlet name * ReloadableResourceBundleMessageSource correctly calculates filenames for all locales now * @PostConstruct works for multiple private init methods of the same name in a hierarchy * @Primary/@Lazy/@DependsOn supported as meta-annotations as well * @Bean/@Scope etc supported as meta-annotations on factory methods as well now * @Required does not get processed on beans returned by @Bean factory methods * @Import detects and accepts existing configuration class of the desired type * @Transactional supports qualifier value for choosing between multiple transaction managers * WebSphereUowTransactionManager falls back to UOWManagerFactory lookup by default * JMS SingleConnectionFactory performs start call within connection monitor (for Oracle AQ) * @ManagedResource is marked as inherited now, for generic management-aware base classes * introduced dedicated @ManagedMetric annotation for metric attributes in a JMX environment * added task namespace with scheduler/executor configuration and scheduled task definitions * added jdbc namespace with embedded-database tag (supporting HSQL, H2, and Derby) * Hibernate AnnotationSessionFactoryBean detects Hibernate's special @Entity annotation too * added SimpleJaxWsServiceExporter workaround for WebLogic 10.3's address format requirements * added support for @WebServiceProvider annotation to Spring's JaxWsServiceExporters * updated Hessian support for Hessian 3.2 compatibility (requiring Hessian 3.2 or above now) * updated Tiles support for Tiles 2.1 compatibility (requiring Tiles 2.1.2 or above now) * Velocity/FreeMarker/TilesViewResolver only returns a view if the target resource exists now * @DirtiesContext is now supported at the test class level with configurable class modes * added beforeTestClass() and afterTestClass() to the TestExecutionListener API * ProfileValueUtils now enforces class-level overrides for @IfProfileValue * @ContextConfiguration's loader attribute is now inherited if not declared locally * TransactionalTestExecutionListener no longer flushes transactions before rolling back Changes in version 3.0.0.M3 (2009-05-06) ---------------------------------------- * Spring 3.0 includes reference documentation now * Spring 3.0 is shipping with proper Maven POMs now * updated to JRuby 1.2 (remaining compatible with JRuby 1.1 and above) * updated to Hessian 3.2.1 (remaining compatible with Hessian 3.1.3 and above) * updated to FreeMarker 2.3.15 (for exposure of FreeMarkerServlet-style HTTP scopes) * removed Axis 1.x support package, keeping basic JAX-RPC support only (next to JAX-WS) * introduced explicit XML array element in spring-beans-3.0.xsd * introduced new type conversion SPI and converter API in spring-core convert package * introduced annotated @Bean factory methods and JavaConfig-style @Configuration classes * introduced @Primary, @Lazy and @DependsOn annotations for scanned components * custom stereotype annotations can be meta-annotated with @Service, @Controller etc as well * @Scope and @Transactional are now supported as meta-annotations on custom annotations * @Autowired uses field/parameter name as fallback qualifier value * qualifier annotations can be used at method level as well (applying to all parameters) * @Value annotation can be used at method level as well (e.g. on bean property setters) * @Value values may use ${...} placeholders (driven by PropertyPlaceholderConfigurer) * @Resource names may use ${...} placeholders (driven by PropertyPlaceholderConfigurer) * fixed EL evaluation of prepared constructor arguments for repeated prototype creation * ConstructorArgumentValues exposed indexed arguments in the order of definition * AutowiredAnnotationBeanPostProcessor calculates cached arguments in a synchronized block * declarative destroy-method="..." specifications get validated at bean creation time * component-scan's "base-package" attribute supports spaces as separators as well * CachedIntrospectionResults always caches bean classes except in case of custom BeanInfo * GenericTypeResolver's type variable cache uses weak values (for OSGi compatibility) * fixed CachingMapDecorator to support garbage-collected weak references (again) * AOP ProxyFactory excludes non-public interfaces when autodetecting proxy interfaces * added DuplicateKeyException to DAO exception hierachy * added EmbeddedDatabase support in spring-jdbc embedded package, with initial HSQL support * SessionAwareMessageListener supports generic declaration of concrete JMS Message type * RmiServiceExporter and RmiRegistryFactoryBean synchronize registry lookup/creation * added "unregisterManagedResource" method to MBeanExporter/MBeanExportOperations * TimerTaskExecutor creates non-daemon Timer and uses bean name as default Timer name * added TaskScheduler interface and Trigger abstraction * added ConcurrentTaskScheduler and ThreadPoolTaskScheduler * added CommonJ TimerManagerTaskScheduler * added CronTrigger implementation for cron expression support * renamed "contextProperties" attribute to "contextParameters" (matching web.xml naming) * "contextParameters" contains Servlet/PortletConfig parameters as well * added default "servletContext" and "servletConfig" environment beans * added default "portletContext" and "portletConfig" environment beans * added default web scope "application", wrapping a ServletContext/PortletContext * JSF FacesContext and ExternalContext are resolvable dependencies by default, if available * FacesRequestAttributes (as used by RequestContextHolder) can access global Portlet session * revised @RequestMapping semantics for REST support purposes * request handler methods with @ModelAttribute annotation always return a model attribute * introduced @ExceptionHandler annotation for used in annotated web controllers * introduced ModelAndViewResolver SPI for custom handler method return types * FreeMarkerView can be initialized with ServletContext only (e.g. for testing) * MockPortletSession supports destruction of session attributes on invalidation * completed upgrade of the TestContext Framework to JUnit 4.5 * SpringJUnit4ClassRunner subclasses can now override the default ContextLoader class * added "value" alias for @ContextConfiguration's "locations" attribute Changes in version 3.0.0.M2 (2009-02-25) ---------------------------------------- * revised expression parser API design * added SimpleThreadScope implementation * refined OSGi version constraints for "javax.annotation" and "junit.framework" * "systemProperties" bean is not considered a default match for type Properties anymore * SimpleAliasRegistry's "getAliases" method returns transitive aliases now * SimpleAliasRegistry detects resolved aliases that loop back to the original name * PropertyPlaceholderConfigurer does not modify Map in case of equal String keys * improved NoClassDefFoundError handling during constructor resolution * inner class names in Java source style ("java.lang.Thread.State") supported as well * pre-converted property values are preserved more eagerly for re-created beans * prototype beans receive independent collection/array even when based on single value * registered plain singletons will be fully matched according to their qualifiers * @Qualifier value matching takes chained aliases of target beans into account as well * ASM-based AnnotationMetadata fully resolves class arguments and enums into Java types * ProceedingJoinPoint resolves parameter names using ASM-based parameter name discovery * MethodInvocations and ProceedingJoinPoints always expose original method (not bridge) * bridge method resolution works with Hibernate-generated CGLIB proxies as well * generic collection type resolution respects upper bound (e.g. ? extends Number) as well * TypeUtils detects variations of ParameterizedType/GenericArrayType assignability as well * ReflectionUtils findMethod detects methods on "java.lang.Object" as well * UrlResource eagerly closes HTTP connections in case of "getInputStream()" failure * PathMatchingResourcePatternResolver avoids NPE when initialized with null ClassLoader * all "taskExecutor" bean properties now accept any "java.util.concurrent.Executor" * added "Future submit(Runnable)" and "Future submit(Callable)" to AsyncTaskExecutor * SimpleAsyncTaskExecutor supports a custom "java.util.concurrent.ThreadFactory" * SchedulingTaskExecutor interface extends AsyncTaskExecutor now * added ThreadPoolExecutorFactoryBean (exposing the native ExecutorService interface) * added ExecutorServiceAdapter class as a standard wrapper for a Spring TaskExecutor * reduced backport-concurrent support to TaskExecutor adapters * added @Async annotation and AsyncAnnotationAdvisor (namespace support coming in M3) * EJB 3.1's @Asynchronous annotation gets detected and supported by default as well * ApplicationListener beans get obtained on demand, supporting non-singletons as well * ApplicationListeners will be called in the order according to the Ordered contract * generified ApplicationListener interface, narrowing the event type to be received * introduced SmartApplicationListener interface for supported event/source types * generified Transaction/Hibernate/Jdo/JpaCallback with generic "doInXxx" return type * HibernateOperations uses generic parameter/return types where possible * JdoOperations uses generic parameter/return types where possible (following JDO 2.1) * removed "flush" operation from JdoDialect (fully relying on JDO 2.0+ compliance now) * added JDO 2.1 compliant StandardPersistenceManagerProxy/SpringPersistenceManagerProxy * Spring-created EntityManagers support JPA 2.0 draft API ("unwrap", "getQueryBuilder") * Spring initiates JPA 2.0 query timeout with remaining Spring transaction timeout * added support for WebSphere's ResourceAdapter-managed messaging transactions * made SpringBeanAutowiringInterceptor callback signature compatible with WebSphere * WebSphereUowTransactionManager preserves original exception in case of rollback * added "flush()" method to TransactionStatus and TransactionSynchronization interfaces * test context manager automatically flushes transactions before rolling back * DefaultLobHandler uses explicit Blob/Clob access for reading when "wrapAsLob"=true * fixed JmsException/JmsUtils to fully avoid NPEs in case of cause messages being null * fixed MessageListenerAdapter's "getSubscriptionName()" to work without delegate as well * fixed HTTP invoker to support resolution of multi-level primitive array classes again * deprecated support for JMS 1.0.2 providers (JmsTemplate102 etc) * introduced top-level HTTP support package "org.springframework.http" * introduced RestTemplate facility in package "org.springframework.web.client" * introduced OXM support package (originating from Spring Web Services) * introduced OXM-based MarshallingMessageConverter for Spring JMS * introduced OXM-based MarshallingView for Spring MVC * refined @PathVariable handling in MVC handler methods * updated Spring Portlet MVC infrastructure and mocks for Portlet API 2.0 * added resource and event methods to Portlet HandlerAdapter/HandlerInterceptor * added resolveException method for resource requests to HandlerExceptionResolver * introduced Resource/EventAwareController subinterfaces of Portlet Controller * introduced @Action/@Render/@Resource/@EventMapping annotations for Portlet MVC * added @RequestHeader support for Portlet MVC (based on Portlet request properties) * introduced @CookieValue annotation for Servlet and Portlet MVC handler methods * @RequestMapping type-level param constraints taken into account consistently * optional boolean parameters in MVC handler methods resolve to "false" if not present * "url" macro in "spring.ftl" performs standard Servlet URL encoding automatically Changes in version 3.0.0.M1 (2008-12-05) ---------------------------------------- * revised project layout and build system (module-based sources, bundle repository) * updated entire codebase for Java 5 code style (generics, varargs, StringBuilder) * updated to JUnit 4.5 and JRuby 1.1 * removed WebLogic 8.1 and WebSphere 5.1 support * removed native TopLink API support (superseded by JPA) * removed Commons Attributes support (superseded by Java 5 annotations) * removed Jakarta JSTL support for JSP 1.2 (superseded by JSP 2.0) * removed outdated Struts 1.x Action delegation support * removed ContextLoaderServlet and Log4jConfigServlet * deprecated form controller hierarchy in favor of @MVC form object handling * deprecated JUnit 3.8 test class hierarchy in favor of test context framework * revised TaskExecutor interface to extend "java.util.concurrent.Executor" now * introduced Spring EL parser in org.springframework.expression package * introduced #{...} expression support in bean definitions * introduced @Value annotation for embedded expression support * introduced @PathVariable annotation for MVC handler methods * introduced ShallowEtagHeaderFilter * introduced AbstractAtomFeedView and AbstractRssFeedView * introduced default value support for @RequestParam * introduced @RequestHeader annotation for MVC handler methods * introduced "spring:url" and "spring:param" JSP tags