initial commit
[java-spring.git] / changelog.txt
1 SPRING FRAMEWORK CHANGELOG
2 ==========================
3 http://www.springsource.org
4
5
6 Changes in version 3.0.4 (2010-08-19)
7 -------------------------------------
8
9 * support for Hibernate Core 3.6, Hibernate Validator 4.1, EclipseLink 2.1, EHCache 2.2
10 * OSGi manifest version range accepts EHCache 2.x as well
11 * added "contentLength()" method to Resource abstraction
12 * URL-based Resource variants introspect "last-modified" and "content-length" response headers
13 * refined "exists()" check for UrlResource (HEAD request) and ClassPathResource (URL resolution)
14 * ConversionService is able to deal with empty collections and nested collections (fixed regression)
15 * ConversionService properly handles nested Resource arrays in Map values (fixed regression)
16 * ConversionService does not accidentally use copy constructor for same type
17 * fixed double ConversionFailedException nesting for ObjectToObjectConverter invocations
18 * BeanWrapper preserves annotation information for individual array/list/map elements
19 * Spring's constructor resolution consistently finds non-public multi-arg constructors
20 * revised constructor argument caching, avoiding a race condition for converted argument values
21 * SpEL passes full collection type context (generics, annotations) to ConversionService
22 * SpEL 'select last' operator now works consistently with maps
23 * BeanWrapper/DataBinder's "autoGrowNestedPaths" works for Maps as well
24 * fixed concurrency issue in TypedStringValue, showing for nested typed Maps in prototype beans
25 * fixed WeakReferenceMonitor to never stop its monitoring thread if an entry has been registered
26 * fixed CronTrigger to correctly parse month parts expressed as numbers (1-12 instead of 0-11)
27 * TaskExecutorFactoryBean (as used by task:executor) exposes full ThreadPoolTaskExecutor type
28 * JmsResourceHolder does not ignore IllegalStateException from locally synchronized transaction
29 * fixed JMS CachingConnectionFactory to correctly cache a producer without fixed destination as well
30 * DefaultMessageListenerContainer triggers Session commit even if no message has been received
31 * DefaultMessageListenerContainer supports client id setting even for non-shared Connections
32 * Spring's MessageEndpointFactory classes are now JCA 1.6 compliant as well
33 * AbstractJaxWsServiceExporter supports "bindingType" bean property, overriding @BindingType
34 * AbstractJaxWsServiceExporter supports "webServiceFeatures" bean property on JAX-WS 2.2
35 * JaxWsPortProxyFactoryBean takes "wsdlDocumentUrl", "namespaceUri" etc defaults from @WebService
36 * Jaxb2Marshaller's "marshallerProperties" Map accepts any value type
37 * SpringTemplateLoader for FreeMarker supports last-modified timestamp through Resource abstraction
38 * HibernateJpaDialect correctly closes borrowed connections even for nested JDBC executions
39 * DefaultJdoDialect supports JDO 3.0 query timeout facility (as supported by DataNucleus 2.1)
40 * transaction names based on method id from most specific method (target class instead of interface)
41 * added "validationMessageSource" to LocalValidatorFactoryBean, for Spring-based validation messages
42 * Spring field error arguments include actually declared annotation attributes in alphabetical order
43 * JSR-303 Pattern message resolvable through Spring MessageSource (despite special characters) 
44 * DispatcherServlet applies default view name translation to error views as well
45 * mvc:annotation-driven reliably detects JSR-303 and JAXB2 in an OSGi environment as well
46 * revised @MVC handler method resolution with respect to handler methods on generic interfaces
47 * @MVC handler methods reliably resolve MultipartRequest arguments with HiddenHttpMethodFilter
48 * WebDataBinder and @MVC request params detect and introspect MultipartFile arrays as well
49 * fixed @PathVariable regression in combination with ConversionService usage on DataBinder
50 * @CookieValue returns decoded cookie value in a Servlet environment (analogous to @RequestParam)
51 * MVC HandlerExceptionResolvers prevent caching for exception views if preventResponseCaching=true
52 * @ExceptionHandler works for inherited method and CGLIB proxies on Portlet controllers as well
53 * Portlet @MVC's implicit render model will be updated at the end of the event phase
54 * Portlet AbstractController consistently uses session mutex if "synchronizeOnSession" is active
55 * PortletWrappingController supports Portlet 2.0 resource and event requests as well
56 * fixed JSP EvalTag to render null result as empty String instead of "null" String
57 * JSP EvalTag resolves "@myBeanName" references in expressions against the WebApplicationContext
58 * added support for static resource serving: ResourceHttpRequestHandler, mvc:resources
59 * revised DispatcherServlet's last-modified handling to properly work with scoped controllers
60 * MockMultipartHttpServletRequest pre-defines method "POST" and content type "multipart/form-data"
61
62
63 Changes in version 3.0.3 (2010-06-15)
64 -------------------------------------
65
66 * Spring autodetects JodaTime 1.3 or higher (as required), ignoring older JodaTime versions
67 * clarified that Spring's Jackson support requires Jackson 1.3 or higher
68 * JPA 2.0 support tested and supported with Hibernate 3.5.2 and OpenJPA 2.0.0 GA as well
69 * revised VFS support for Spring's component scanning to work on JBoss AS 6.0.0 M3 as well
70 * fixed URIEditor's URI construction to consider fragment as well
71 * added default InputSourceEditor for SAX InputSource construction with a URL String as system id
72 * CachedIntrospectionResults only caches GenericTypeAwarePropertyDescriptors if fully safe
73 * revised BeanWrapper's exception wrapping to consistently handle ConversionExceptions
74 * DefaultListableBeanFactory checks for alias circle on registerAlias (avoiding endless loop)
75 * ConversionService is able to apply Converters to interface-based array elements
76 * ConversionService fully supports conversion from String to MediaType now (through 'valueOf')
77 * revised exception handling in ObjectToObjectConverter, avoiding InvocationTargetExceptions
78 * a context ConversionService is able to override an ApplicationContext's resource editors
79 * refined LifecycleProcessor exception handling, properly wrapping a start exception from a bean
80 * revised DefaultLifecycleProcessor's handling of circular dependencies to avoid stack overflow
81 * fixed constructor argument caching for prototypes with multiple constructor matches
82 * specific detection of CGLIB subclasses in order to properly handle CGLIB interfaces
83 * registerDependentBean resolves to the canonical bean name in order to handle alias references
84 * fixed registerResolvableDependency mechanism to correctly handle non-serializable factory objects
85 * added "expose-proxy" attribute to aop namespace (enforcing AopContext proxy exposure with CGLIB)
86 * revised AbstractInterceptorDrivenBeanDefinitionDecorator for further alignment with auto-proxying
87 * BeanDefinitionVisitor/PropertyPlaceholderConfigurer finds and resolves values in arrays as well
88 * property placeholders can deal with nested expressions which happen to use the same suffix
89 * SpEL's Elvis operator is able to deal with #{${myProp}?:defaultValue} case if myProp is empty
90 * introduced EmbeddedValueResolverAware callback interface for convenient placeholder resolution
91 * @Transactional qualifier value matches against @Qualifier annotations on @Bean methods as well
92 * setTransactionIsolation on JDBC Connection only called when actually necessary (for PostgreSQL)
93 * added limit for parsed SQL cache to NamedParameterJdbcTemplate (default is 256; configurable) 
94 * CachingConnectionFactory detects destination equality for WebSphere MQ as well (using toString)
95 * DefaultPersistenceUnitManager's getPersistenceUnitInfo method has 2.5 compatible signature again
96 * DefaultMessageListenerContainer reacts to maxConcurrentConsumers reduction for long-lived tasks
97 * added "idleConsumerLimit" bean property to DefaultMessageListenerContainer (default is 1)
98 * AsyncAnnotationBeanPostProcessor consistently adds @Async processing as first Advisor in the chain
99 * ScheduledTaskRegistrar (as used for @Scheduled processing) properly shuts down its default executor
100 * CronTrigger defensively protects itself against accidental re-fires if a task runs too early
101 * MailSendException includes all messages as failed messages in case of a connect failure
102 * added support for JAX-WS 2.1 WebServiceFeatures to JaxWsPortClientInterceptor/PortProxyFactoryBean
103 * added XmlAwareFormHttpMessageConverter, taking over the 3.0.2-introduced XML multipart support
104 * ServletContextResourcePatternResolver handles "/WEB-INF/lib/*.jar!/**/context.xml" style patterns
105 * fixed MVC mapping regression for servlet url-pattern "/" case on servers other than WebSphere
106 * MVC mappings properly apply even to welcome file entries that forward to a DispatcherServlet
107 * fixed @ExceptionHandler resolution in case of multiple matches at different inheritance levels
108 * revised Portlet SessionStatus.setComplete() to avoid re-exposure of attributes in render phase
109 * shortened Portlet MVC's implicit model render parameter name to "implicitModel"
110 * added convenient "checkRefresh" bean property to TilesConfigurer
111 * TilesConfigurer's "definitionsFactoryClass" property applies common Tiles DefinitionsFactory setup
112 * JSP FormTag calculates proper default form action even when using a rewrite filter on WebSphere
113 * JSP HiddenInputTag allows for using common HTML attributes (equivalent to LabelTag)
114 * fixed JSP ErrorsTag to avoid invalid "*.errors" id, using form object name as id prefix instead
115 * fixed JSP SelectTag's support for rendering enum constants
116 * JSP Radiobutton/CheckboxesTag utilizes PropertyEditor/ConversionService for label rendering
117 * MockHttpServletResponse supports multiple includes
118
119
120 Changes in version 3.0.2 (2010-04-02)
121 -------------------------------------
122
123 * fixed cross-module version ranges in OSGi manifests
124 * fixed contents of org.springframework.web.struts jar
125 * upgraded to Hibernate Validator 4.0.2 and Jackson 1.4.2
126 * compatibility with Hibernate 3.5 final (native and also as a JPA 2.0 provider)
127 * compatibility with OpenJPA 2.0 (support for JPA 2.0 persistence.xml versioning)
128 * compatibility with Hessian 4.0 (in terms of exception propagation)
129 * compatibility with JasperReports 3.x (in terms of resource management)
130 * restored full compatibility with Servlet 2.4 containers on all VMs
131 * PropertyEditor lookup fallback works on Google App Engine as well
132 * fixed TypeDescriptor/MethodParameter toString for all cases in debug log messages
133 * widened AbstractFactoryBean's "getObjectType" signature to return any Class as well
134 * BeanPostProcessors are allowed to return a null bean value in the middle of the chain
135 * autowire="byType" ignores parameter name when choosing a primary bean, as defined
136 * ObjectFactoryCreatingFactoryBean creates a serializable ObjectFactory reference
137 * added ProviderCreatingFactoryBean, exposing a serializable JSR-330 Provider reference
138 * "conversionService" bean will be ignored if it is not of type ConversionService
139 * revised AbstractInterceptorDrivenBeanDefinitionDecorator for alignment with auto-proxying
140 * SimpleJdbcCall's "returningResultSet" accepts any plain RowMapper now
141 * added public "validateDatabaseSchema" method to Hibernate LocalSessionFactoryBean
142 * HibernateJpaDialect borrows JDBC Connection on demand (supporting aggressive release)
143 * JCA listener containers delegate to wrapped Transaction handle (for Geronimo compatibility)
144 * @Transactional qualifiers work in unit tests as well (TransactionalTestExecutionListener)
145 * @Value processing works in test instances (using the test context framework) as well now
146 * @DirtiesContext is now inherited for class-level usage
147 * NativeWebRequest detects native MultipartRequest when decorated by HiddenHttpMethodFilter
148 * WebRequestInterceptor exposes HttpServletResponse through NativeWebRequest (after downcast)
149 * WebContentInterceptor does not restrict HTTP methods by default anymore
150 * WebApplicationObjectSupport's initServletContext will be called only once in any scenario
151 * DispatcherPortlet passes handler instance into HandlerExceptionResolver for action exception
152 * DispatcherPortlet applies preHandleRender callbacks in case of action exception as well
153 * UrlPathHelper cuts off trailing servlet-path slashes for root mappings (on WebSphere)
154 * introduced support for HttpEntity and ResponseEntity wrappers, adding context to body values
155 * fixed DataBinder's conversion error handling for direct field access with ConversionService
156 * @InitBinder methods support all applicable Spring 3.0 parameter annotations as well
157 * fixed @RequestParam(required=false) regression for @InitBinder methods
158 * @ExceptionHandler methods consistently receive original exception
159 * fixed indexed property binding regression in form tag library
160 * fixed @Configurable issue with null bean name
161
162
163 Changes in version 3.0.1 (2010-02-18)
164 -------------------------------------
165
166 * upgraded to AspectJ 1.6.8
167 * full support for JPA 2.0 persistence schema and PersistenceUnitInfo SPI
168 * support for JPA PersistenceContext/Unit injection on Google App Engine
169 * support for Hibernate 3.5 (as native Hibernate API and as JPA 2.0 provider)
170 * support for Tiles 2.2.1 (preserving compatibility with Tiles 2.1.2 and above)
171 * consistent treatment of unresolvable placeholders for Resource and Resource array properties
172 * ConversionFailedException exDLBFposes offending value through public "getValue()" method
173 * fixed BeanFactory's "getBeansWithAnnotation" to ignore beans with non-determinable type
174 * widened FactoryBean's "getObjectType" signature to return any Class (Class<?>)
175 * do not ever consider Object as a candidate type for autowiring by type (autowire="byType") 
176 * BeanDefinitionReader and ClassPath/FileSystemXmlApplicationContext use varargs where possible
177 * introduced BeanDefinitionRegistryPostProcessor extension to BeanFactoryPostProcessor
178 * @Configuration classes support definition of BeanFactoryPostProcessor beans
179 * component-scan's scoped-proxy attribute applies to scope-annotated singleton beans as well
180 * generic ApplicationListener event type gets detected through AOP proxy as well
181 * ApplicationListeners will only be executed once per event (even for scripted objects)
182 * ApplicationListeners will get detected lazily as well (e.g. on @Bean's concrete result)
183 * inner bean ApplicationListeners will be invoked through their proxy (if any)
184 * fixed SimpleApplicationEventMulticaster's retriever caching to allow for proper removal
185 * context-specific "conversionService" bean may refer to annotation-configured converter beans
186 * refined DefaultLifecycleProcessor's start/stop logging and stop exception handling
187 * DefaultLifecycleProcessor allows for overriding specific hooks in subclasses
188 * BeanNameAutoProxyCreator detects alias matches for specified bean names
189 * proxies with AspectJ pointcuts are fully serializable within a BeanFactory now
190 * SharedEntityManagerCreator's EntityManager proxies are fully serializable now
191 * Query call chaining works with shared EntityManager proxy outside of transaction as well
192 * TransactionInterceptor is able to serialize "transactionManagerBeanName" as well
193 * non-matching @Transactional qualifier value will lead to IllegalStateException
194 * fixed WebSphereUowTransactionManager regression: correctly roll back in case of exception
195 * JndiObjectFactoryBean explicitly only chooses public interfaces as default proxy interfaces
196 * added vararg variants of query methods to JdbcTemplate (as known from SimpleJdbcTemplate)
197 * MBeanClientInterceptor/MBeanProxyFactoryBean understands CompositeData/TabularData arrays
198 * added "workManagerMBeanName" property to JBossWorkManagerTaskExecutor
199 * task:executor's id value is now used as thread name prefix of ThreadPoolTaskExecutor
200 * fixed @Scheduled processing to kick in once only even in an ApplicationContext hierarchy
201 * fixed MediaType's Comparable behavior to do a full comparison, aligned with equals behavior
202 * added "sortBySpecificity" method to MediaType, for typical use with accept header matching
203 * MimeMessageHelper encodes from, to, cc, bcc String addresses with given encoding as well
204 * changed HttpStatus.REQUEST_TOO_LONG constant to REQUEST_ENTITY_TOO_LARGE
205 * relaxed generic Class declaration in HttpMessageConverter's canRead/canWrite/read signatures
206 * fixed "mvc:view-controller" to work in a fully isolated fashion on Spring Dynamic Modules
207 * DefaultRequestToViewNameTranslator strips trailing slashes as well (can also be turned off)
208 * @RequestParam/RequestHeader/CookieValue's defaultValue allows for declaring empty String
209 * @SessionAttributes works when used on an annotated controller interface with AOP proxying
210 * WebRequest is a resolvable dependency in Servlet/Portlet web application contexts
211 * revised JSP-based views to never fail when trying to set Servlet API forward attributes
212 * lenient evaluation of boolean 'true' attribute expressions in JSP form tag library
213 * added new spring:eval tag for evaluating SpEL expressions from JSP pages
214 * SpringBeanAutowiringSupport works in extra ClassLoaders as well (e.g. WebLogic JAX-WS)
215
216
217 Changes in version 3.0.0.GA (2009-12-16)
218 ----------------------------------------
219
220 * component scanning autodetects the new EE 6 "javax.annotation.ManagedBean" stereotype
221 * updated JPA 2.0 support to the final spec (tested compatibility with EclipseLink 2.0 GA)
222 * full support for GlassFish V3 GA (includes component scanning and load-time weaving)
223 * upgraded to JRuby 1.4 (while remaining compatible with JRuby 1.1 and above)
224 * bean property names are matched leniently ("title" and "Title"; "ISBN" and "iSBN")
225 * bean properties of type enum array/collection can be populated with comma-separated String
226 * removed getBeansWithAnnotation(Class,boolean,boolean) method from ListableBeanFactory
227 * PropertyPlaceholderConfigurer is compatible with Spring 2.5 extensions (again)
228 * SmartLifecycle beans will get auto-started on demand even if marked as lazy-init
229 * MBeanExporter detects FactoryBean-exported resources independent from declaration order
230 * refactored SpelExpressionParser to accept SpelParserConfiguration object with boolean flags
231 * revised TypeDescriptor's valueOf and forObject factory methods with some level of caching
232 * revised GenericConverter's "getConvertibleTypes" signature to return Set of ConvertiblePair
233 * GenericConversionService prefers matches against inherited interfaces over superclasses
234 * renamed ConverterRegistry's addGenericConverter(GenericConverter) method to addConverter
235 * no default converters for Object-to-Map and Map-To-Object anymore
236 * default converter for String-to-Properties parsing only applies for actual Properties objects
237 * default ObjectToStringConverter only stringifies objects that indicate proper toString behavior
238 * added "converters" property to FormattingConversionServiceFactoryBean as well
239 * full support for formatters and formatting annotations on array/collection elements
240 * no default number formatter (relying on plain java.lang.Number parsing and rendering)
241 * no default formatters for Date/Calendar (requiring explicit use of @DateTimeFormat)
242 * BeanValidationPostProcessor runs in before-initialization phase (before init methods) by default
243 * removed MultipartRequest mixin interface again (avoiding a package dependency cycle)
244 * revised RestTemplate method signatures to accept Object values instead of just Strings
245 * revised path variable extraction to properly deal with dots in variable values (again)
246 * reintroduced createBinder template method in Servlet/Portlet AnnotationMethodHandlerAdapter
247
248
249 Changes in version 3.0.0.RC3 (2009-12-01)
250 -----------------------------------------
251
252 * prepared for Grails and ROO requirements
253 * restored compatibility with Apache CXF
254 * fixed bean definition import via "classpath*:" URLs
255 * added chaining-capable "add" method to MutablePropertyValues
256 * constructor arguments can be overridden by name in child bean definitions
257 * BeanDefinitions return isSingleton()=true by default again, with scope name empty
258 * init/destroy methods get processed in the order of declaration at each hierarchy level
259 * fixed lookup of LifecycleProcessor bean in a Spring Dynamic Modules environment
260 * refined lifecycle processing through introduction of startup/shutdown phases
261 * fixed transaction synchronization setup with TransactionAwareDataSourceProxy involved
262 * added support for Hibernate 3.3 RegionFactory cache SPI to LocalSessionFactoryBean
263 * JSR-303 SpringValidatorAdapter uses field name as first argument (analogous to bind errors)
264 * replaced DefaultConversionService with ConversionServiceFactory(Bean)
265 * revised FormatterRegistry interface and FormattingConversionServiceFactoryBean setup
266 * mvc:annotation-driven exposes default Validator and ConversionService as top-level beans
267 * mvc:annotation-driven registers applicable HttpMessageConverters by default, if available
268 * added interceptors support to mvc namespace, for path-based interceptor mappings
269
270
271 Changes in version 3.0.0.RC2 (2009-11-13)
272 -----------------------------------------
273
274 * updated to final versions of JSR-330 "javax.inject" and JSR-303 "javax.validation" APIs
275 * full compliance with the JSR-330 TCK (i.e. full compliance with the final specification)
276 * support for Hibernate Validator 4.0 GA (as the JSR-303 reference implementation)
277 * added support for load-time weaving in JBoss 5.x
278 * added support for recent EHCache 1.6 configuration properties to EHCacheFactoryBean
279 * added AnnotatedBeanDefinitionReader helper for programmatic registration of annotated classes
280 * added AnnotationConfig(Web)ApplicationContext for convenient registration/scanning of classes
281 * added GenericXmlApplicationContext with flexible configuration options for its XML support
282 * AbstractApplicationContext can also start up in case of system properties access failure
283 * internal MergedBeanDefinitionPostProcessors apply after all other post-processors
284 * inner beans detected as ApplicationListeners as well (only supported for inner singletons)
285 * child bean definition's scope attribute can be inherited from parent bean definition now
286 * introduced SmartLifecycle interface with auto-startup and shutdown order support
287 * introduced LifecycleProcessor delegate, customizable through "lifecycleProcessor" bean
288 * MessageListenerContainers and Quartz SchedulerFactoryBean start up on refresh instead of init
289 * added initialize-database tag to jdbc namespace for populating external data sources with data
290 * PathMatchingResourcePatternResolver leniently ignores non-existing root directories
291 * DefaultConversionService understands "on"/"off", "yes"/"no", "1"/"0" as boolean values
292 * CustomEditorConfigurer supports PropertyEditor instances again (with deprecation warning)
293 * revised MethodParameter's annotation accessor methods
294 * ClassUtils is now parameterized with Class<?> and Class<T> where appropriate
295 * DataBinder now accepts var-args to set allowed, disallowed, and required fields
296 * DataBinder auto-grows nested paths on traversal (avoiding NullValueInNestedPathException)
297 * fixed enum binding regression with WebRequestDataBinder (as used by @MVC data binding now)
298 * fixed FieldError to expose rejected input value as String value instead of as array
299 * JSR-303 Validator will only register validation failures if no binding failure happened
300 * ContentNegotiatingViewResolver works with ignoreAcceptHeader and defaultContentType as well
301 * added Spring MVC namespace, with convenient mvc:annotation-driven configuration element
302 * default number and datetime formatters configured when using the Spring MVC namespace
303 * full support for datetime formatting using the Joda Time library (automatically enabled)
304 * added convenient @NumberFormat and @DateTimeFormat annotations for declarative formatting
305 * implicit T.valueOf(S) and constructor T(S) lookup if no explicit S->T converter matches
306 * AbstractExcelView is compatible with Apache POI 3.0 as well as 3.5 now
307 * TilesConfigurer only sets up EL support if JSP 2.1 is present (for JSP 2.0 compatibility)
308 * re-introduced Struts 1.x support ("org.springframework.web.struts") in deprecated form
309 * deprecated scheduling support for JDK 1.3 Timer ("org.springframework.scheduling.timer")
310 * deprecated remoting support for JAX-RPC (in favor of JAX-WS)
311
312
313 Changes in version 3.0.0.RC1 (2009-09-25)
314 -----------------------------------------
315
316 * upgraded to CGLIB 2.2, AspectJ 1.6.5, Groovy 1.6.3, EHCache 1.6.2, JUnit 4.7, TestNG 5.10
317 * introduced early support for JSR-330 "javax.inject" annotations (for autowiring)
318 * introduced early support for JSR-303 Bean Validation (setup and MVC integration)
319 * added default editors for "java.util.Currency" and "java.util.TimeZone"
320 * refined PathMatchingResourcePatternResolver's treatment of non-readable directories
321 * PathMatchingResourcePatternResolver understands VFS resources (i.e. works on JBoss 5.x)
322 * revised AccessControlContext access from BeanFactory
323 * AbstractBeanDefinitionParser can deal with null return value as well
324 * PropertyOverrideConfigurer's "ignoreInvalidKeys" ignores invalid property names as well
325 * PropertyPlaceholderConfigurer supports "${myKey:myDefaultValue}" defaulting syntax
326 * BeanFactory's default type conversion falls back to String constructor on target type
327 * BeanFactory tries to create unknown collection implementation types via default constructor
328 * BeanFactory supports ObjectFactory as a dependency type for @Autowired and @Value
329 * BeanFactory supports JSR-330 Provider interface as a dependency type for @Inject
330 * BeanFactory prefers local primary bean to primary bean in parent factory
331 * protected @Autowired method can be overridden with non-annotated method to suppress injection
332 * private @Autowired methods with same signature will be called individually across a hierarchy
333 * @PostConstruct processed top-down (base class first); @PreDestroy bottom-up (subclass first)
334 * ConfigurationClassPostProcessor detect @Bean methods on registered plain bean classes as well
335 * support for default "conversionService" bean in an ApplicationContext
336 * MBeanServerFactoryBean returns JDK 1.5 platform MBeanServer for agent id "" (empty String)
337 * changed NamedParameter/SimpleJdbcOperations parameter signatures to accept any Map value type 
338 * refined logging in JMS SingleConnectionFactory and DefaultMessageListenerContainer
339 * introduced "ui.format" package as an alternative to PropertyEditors for data binding
340 * @RequestMapping annotation now supported for annotated interfaces (and JDK proxies) as well
341 * @RequestParam and co support placeholders and expressions in their defaultValue attributes
342 * @Value expressions supported as MVC handler method arguments as well (against request scope)
343 * JSR-303 support for validation of @MVC handler method arguments driven by @Valid annotations
344 * refined response handling for @ExceptionHandler methods
345 * @ResponseStatus usage in handler methods detected by RedirectView
346 * all @SessionAttributes get exposed to the model before handler method execution
347 * @Event/ResourceMapping uniquely mapped to through event/resource id, even across controllers
348 * MultipartRequest is available as a mixin interface on (Native)WebRequest as well
349 * removed outdated "cacheJspExpressions" feature from ExpressionEvaluationUtils
350 * introduced common ErrorHandler strategy, supported by message listener container
351 * Jpa/JdoTransactionManager passes resolved timeout into Jpa/JdoDialect's beginTransaction
352 * HibernateJpaDialect applies timeout onto native Hibernate Transaction before begin call
353 * Spring's Hibernate support is now compatible with Hibernate 3.5 beta 1 as well
354 * Spring's JPA support is now fully compatible with JPA 2.0 as in EclipseLink 2.0.0.M7
355 * SpringJUnit4ClassRunner is now compatible with JUnit 4.5, 4.6, and 4.7
356 * SpringJUnit4ClassRunner once again supports collective timeouts for repeated tests
357 * deprecated @NotTransactional annotation for test classes in favor of @BeforeTransaction
358
359
360 Changes in version 3.0.0.M4 (2009-08-10)
361 ----------------------------------------
362
363 * upgraded to JUnit 4.6, TestNG 5.9, and EasyMock 2.5.1
364 * updated all Spring Framework OSGI manifests to list unversioned imports explicitly
365 * relaxed several OSGi bundle dependencies (optional, extended version ranges)
366 * revised Java 6 checks to test for the presence of specific Java 6 interfaces/classes only
367 * replaced Commons Collections dependency with Spring-provided LinkedCaseInsensitiveMap
368 * case-insensitive Maps and key Sets preserve original casing for introspection/logging
369 * constructor argument type matching supports arrays and simple class names now
370 * XML constructor-arg element allows for specifying a constructor argument by name now
371 * XML import elements with relative resource patterns are supported as well now
372 * introduced non-lenient constructor resolution mode for BeanDefinitions (for RFC-124)
373 * revised DefaultListableBeanFactory's access control when running within a SecurityManager
374 * BeanWrapper and DefaultListableBeanFactory accept a custom ConversionService now
375 * DefaultListableBeanFactory references are serializable now when initialized with an id
376 * scoped proxies are serializable now, for web scopes as well as for singleton beans
377 * injected request/session references are serializable proxies for the current request now
378 * Servlet/Portlet ApplicationContexts use a specific id based on servlet/portlet name
379 * ReloadableResourceBundleMessageSource correctly calculates filenames for all locales now
380 * @PostConstruct works for multiple private init methods of the same name in a hierarchy
381 * @Primary/@Lazy/@DependsOn supported as meta-annotations as well
382 * @Bean/@Scope etc supported as meta-annotations on factory methods as well now
383 * @Required does not get processed on beans returned by @Bean factory methods
384 * @Import detects and accepts existing configuration class of the desired type
385 * @Transactional supports qualifier value for choosing between multiple transaction managers
386 * WebSphereUowTransactionManager falls back to UOWManagerFactory lookup by default
387 * JMS SingleConnectionFactory performs start call within connection monitor (for Oracle AQ)
388 * @ManagedResource is marked as inherited now, for generic management-aware base classes
389 * introduced dedicated @ManagedMetric annotation for metric attributes in a JMX environment
390 * added task namespace with scheduler/executor configuration and scheduled task definitions
391 * added jdbc namespace with embedded-database tag (supporting HSQL, H2, and Derby)
392 * Hibernate AnnotationSessionFactoryBean detects Hibernate's special @Entity annotation too
393 * added SimpleJaxWsServiceExporter workaround for WebLogic 10.3's address format requirements
394 * added support for @WebServiceProvider annotation to Spring's JaxWsServiceExporters
395 * updated Hessian support for Hessian 3.2 compatibility (requiring Hessian 3.2 or above now)
396 * updated Tiles support for Tiles 2.1 compatibility (requiring Tiles 2.1.2 or above now)
397 * Velocity/FreeMarker/TilesViewResolver only returns a view if the target resource exists now
398 * @DirtiesContext is now supported at the test class level with configurable class modes
399 * added beforeTestClass() and afterTestClass() to the TestExecutionListener API
400 * ProfileValueUtils now enforces class-level overrides for @IfProfileValue
401 * @ContextConfiguration's loader attribute is now inherited if not declared locally
402 * TransactionalTestExecutionListener no longer flushes transactions before rolling back
403
404
405 Changes in version 3.0.0.M3 (2009-05-06)
406 ----------------------------------------
407
408 * Spring 3.0 includes reference documentation now
409 * Spring 3.0 is shipping with proper Maven POMs now
410 * updated to JRuby 1.2 (remaining compatible with JRuby 1.1 and above)
411 * updated to Hessian 3.2.1 (remaining compatible with Hessian 3.1.3 and above)
412 * updated to FreeMarker 2.3.15 (for exposure of FreeMarkerServlet-style HTTP scopes)
413 * removed Axis 1.x support package, keeping basic JAX-RPC support only (next to JAX-WS)
414 * introduced explicit XML array element in spring-beans-3.0.xsd
415 * introduced new type conversion SPI and converter API in spring-core convert package
416 * introduced annotated @Bean factory methods and JavaConfig-style @Configuration classes
417 * introduced @Primary, @Lazy and @DependsOn annotations for scanned components
418 * custom stereotype annotations can be meta-annotated with @Service, @Controller etc as well
419 * @Scope and @Transactional are now supported as meta-annotations on custom annotations
420 * @Autowired uses field/parameter name as fallback qualifier value
421 * qualifier annotations can be used at method level as well (applying to all parameters)
422 * @Value annotation can be used at method level as well (e.g. on bean property setters)
423 * @Value values may use ${...} placeholders (driven by PropertyPlaceholderConfigurer)
424 * @Resource names may use ${...} placeholders (driven by PropertyPlaceholderConfigurer)
425 * fixed EL evaluation of prepared constructor arguments for repeated prototype creation
426 * ConstructorArgumentValues exposed indexed arguments in the order of definition
427 * AutowiredAnnotationBeanPostProcessor calculates cached arguments in a synchronized block
428 * declarative destroy-method="..." specifications get validated at bean creation time
429 * component-scan's "base-package" attribute supports spaces as separators as well
430 * CachedIntrospectionResults always caches bean classes except in case of custom BeanInfo
431 * GenericTypeResolver's type variable cache uses weak values (for OSGi compatibility)
432 * fixed CachingMapDecorator to support garbage-collected weak references (again)
433 * AOP ProxyFactory excludes non-public interfaces when autodetecting proxy interfaces
434 * added DuplicateKeyException to DAO exception hierachy 
435 * added EmbeddedDatabase support in spring-jdbc embedded package, with initial HSQL support
436 * SessionAwareMessageListener supports generic declaration of concrete JMS Message type
437 * RmiServiceExporter and RmiRegistryFactoryBean synchronize registry lookup/creation
438 * added "unregisterManagedResource" method to MBeanExporter/MBeanExportOperations
439 * TimerTaskExecutor creates non-daemon Timer and uses bean name as default Timer name
440 * added TaskScheduler interface and Trigger abstraction
441 * added ConcurrentTaskScheduler and ThreadPoolTaskScheduler
442 * added CommonJ TimerManagerTaskScheduler
443 * added CronTrigger implementation for cron expression support
444 * renamed "contextProperties" attribute to "contextParameters" (matching web.xml naming)
445 * "contextParameters" contains Servlet/PortletConfig parameters as well
446 * added default "servletContext" and "servletConfig" environment beans
447 * added default "portletContext" and "portletConfig" environment beans
448 * added default web scope "application", wrapping a ServletContext/PortletContext
449 * JSF FacesContext and ExternalContext are resolvable dependencies by default, if available
450 * FacesRequestAttributes (as used by RequestContextHolder) can access global Portlet session
451 * revised @RequestMapping semantics for REST support purposes
452 * request handler methods with @ModelAttribute annotation always return a model attribute
453 * introduced @ExceptionHandler annotation for used in annotated web controllers
454 * introduced ModelAndViewResolver SPI for custom handler method return types
455 * FreeMarkerView can be initialized with ServletContext only (e.g. for testing)
456 * MockPortletSession supports destruction of session attributes on invalidation
457 * completed upgrade of the TestContext Framework to JUnit 4.5
458 * SpringJUnit4ClassRunner subclasses can now override the default ContextLoader class
459 * added "value" alias for @ContextConfiguration's "locations" attribute
460
461
462 Changes in version 3.0.0.M2 (2009-02-25)
463 ----------------------------------------
464
465 * revised expression parser API design
466 * added SimpleThreadScope implementation
467 * refined OSGi version constraints for "javax.annotation" and "junit.framework"
468 * "systemProperties" bean is not considered a default match for type Properties anymore
469 * SimpleAliasRegistry's "getAliases" method returns transitive aliases now
470 * SimpleAliasRegistry detects resolved aliases that loop back to the original name
471 * PropertyPlaceholderConfigurer does not modify Map in case of equal String keys
472 * improved NoClassDefFoundError handling during constructor resolution
473 * inner class names in Java source style ("java.lang.Thread.State") supported as well
474 * pre-converted property values are preserved more eagerly for re-created beans
475 * prototype beans receive independent collection/array even when based on single value
476 * registered plain singletons will be fully matched according to their qualifiers
477 * @Qualifier value matching takes chained aliases of target beans into account as well
478 * ASM-based AnnotationMetadata fully resolves class arguments and enums into Java types
479 * ProceedingJoinPoint resolves parameter names using ASM-based parameter name discovery
480 * MethodInvocations and ProceedingJoinPoints always expose original method (not bridge)
481 * bridge method resolution works with Hibernate-generated CGLIB proxies as well
482 * generic collection type resolution respects upper bound (e.g. ? extends Number) as well
483 * TypeUtils detects variations of ParameterizedType/GenericArrayType assignability as well
484 * ReflectionUtils findMethod detects methods on "java.lang.Object" as well
485 * UrlResource eagerly closes HTTP connections in case of "getInputStream()" failure
486 * PathMatchingResourcePatternResolver avoids NPE when initialized with null ClassLoader
487 * all "taskExecutor" bean properties now accept any "java.util.concurrent.Executor"
488 * added "Future submit(Runnable)" and "Future submit(Callable)" to AsyncTaskExecutor
489 * SimpleAsyncTaskExecutor supports a custom "java.util.concurrent.ThreadFactory"
490 * SchedulingTaskExecutor interface extends AsyncTaskExecutor now
491 * added ThreadPoolExecutorFactoryBean (exposing the native ExecutorService interface)
492 * added ExecutorServiceAdapter class as a standard wrapper for a Spring TaskExecutor
493 * reduced backport-concurrent support to TaskExecutor adapters
494 * added @Async annotation and AsyncAnnotationAdvisor (namespace support coming in M3)
495 * EJB 3.1's @Asynchronous annotation gets detected and supported by default as well
496 * ApplicationListener beans get obtained on demand, supporting non-singletons as well
497 * ApplicationListeners will be called in the order according to the Ordered contract
498 * generified ApplicationListener interface, narrowing the event type to be received
499 * introduced SmartApplicationListener interface for supported event/source types
500 * generified Transaction/Hibernate/Jdo/JpaCallback with generic "doInXxx" return type
501 * HibernateOperations uses generic parameter/return types where possible
502 * JdoOperations uses generic parameter/return types where possible (following JDO 2.1)
503 * removed "flush" operation from JdoDialect (fully relying on JDO 2.0+ compliance now)
504 * added JDO 2.1 compliant StandardPersistenceManagerProxy/SpringPersistenceManagerProxy
505 * Spring-created EntityManagers support JPA 2.0 draft API ("unwrap", "getQueryBuilder")
506 * Spring initiates JPA 2.0 query timeout with remaining Spring transaction timeout
507 * added support for WebSphere's ResourceAdapter-managed messaging transactions
508 * made SpringBeanAutowiringInterceptor callback signature compatible with WebSphere
509 * WebSphereUowTransactionManager preserves original exception in case of rollback
510 * added "flush()" method to TransactionStatus and TransactionSynchronization interfaces
511 * test context manager automatically flushes transactions before rolling back
512 * DefaultLobHandler uses explicit Blob/Clob access for reading when "wrapAsLob"=true
513 * fixed JmsException/JmsUtils to fully avoid NPEs in case of cause messages being null
514 * fixed MessageListenerAdapter's "getSubscriptionName()" to work without delegate as well
515 * fixed HTTP invoker to support resolution of multi-level primitive array classes again
516 * deprecated support for JMS 1.0.2 providers (JmsTemplate102 etc)
517 * introduced top-level HTTP support package "org.springframework.http"
518 * introduced RestTemplate facility in package "org.springframework.web.client"
519 * introduced OXM support package (originating from Spring Web Services)
520 * introduced OXM-based MarshallingMessageConverter for Spring JMS
521 * introduced OXM-based MarshallingView for Spring MVC
522 * refined @PathVariable handling in MVC handler methods
523 * updated Spring Portlet MVC infrastructure and mocks for Portlet API 2.0
524 * added resource and event methods to Portlet HandlerAdapter/HandlerInterceptor
525 * added resolveException method for resource requests to HandlerExceptionResolver
526 * introduced Resource/EventAwareController subinterfaces of Portlet Controller
527 * introduced @Action/@Render/@Resource/@EventMapping annotations for Portlet MVC
528 * added @RequestHeader support for Portlet MVC (based on Portlet request properties)
529 * introduced @CookieValue annotation for Servlet and Portlet MVC handler methods
530 * @RequestMapping type-level param constraints taken into account consistently
531 * optional boolean parameters in MVC handler methods resolve to "false" if not present
532 * "url" macro in "spring.ftl" performs standard Servlet URL encoding automatically
533
534
535 Changes in version 3.0.0.M1 (2008-12-05)
536 ----------------------------------------
537
538 * revised project layout and build system (module-based sources, bundle repository)
539 * updated entire codebase for Java 5 code style (generics, varargs, StringBuilder)
540 * updated to JUnit 4.5 and JRuby 1.1
541 * removed WebLogic 8.1 and WebSphere 5.1 support
542 * removed native TopLink API support (superseded by JPA)
543 * removed Commons Attributes support (superseded by Java 5 annotations)
544 * removed Jakarta JSTL support for JSP 1.2 (superseded by JSP 2.0)
545 * removed outdated Struts 1.x Action delegation support
546 * removed ContextLoaderServlet and Log4jConfigServlet
547 * deprecated form controller hierarchy in favor of @MVC form object handling
548 * deprecated JUnit 3.8 test class hierarchy in favor of test context framework
549 * revised TaskExecutor interface to extend "java.util.concurrent.Executor" now
550 * introduced Spring EL parser in org.springframework.expression package
551 * introduced #{...} expression support in bean definitions
552 * introduced @Value annotation for embedded expression support
553 * introduced @PathVariable annotation for MVC handler methods
554 * introduced ShallowEtagHeaderFilter
555 * introduced AbstractAtomFeedView and AbstractRssFeedView
556 * introduced default value support for @RequestParam
557 * introduced @RequestHeader annotation for MVC handler methods
558 * introduced "spring:url" and "spring:param" JSP tags