Commit Graph

569 Commits

Author SHA1 Message Date
Keith Donald bcb10f2fe4 empty collection test refinements
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3884 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 15:27:29 +00:00
Keith Donald c45f4b1caf spr-7728: empty collection conversion can return value not assignable to targetType
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3883 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 14:21:54 +00:00
Chris Beams 5a7d2a91ba Introduce ApplicationContextInitializer interface
Designed primarily for use in conjunction with web applications
to provide a convenient mechanism for configuring the container
programmatically.

ApplicationContextInitializer implementations are specified through the
new "contextInitializerClasses" servlet context parameter, then detected
and invoked by ContextLoader in its customizeContext() method.

In any case, the semantics of ApplicationContextInitializer's
initialize(ConfigurableApplicationContext) method require that
invocation occur *prior* to refreshing the application context.

ACI implementations may also implement Ordered/PriorityOrdered and
ContextLoader will sort instances appropriately prior to invocation.

Specifically, this new support provides a straightforward way to
programmatically access the container's Environment for the purpose
of adding, removing or otherwise manipulating PropertySource objects.

See Javadoc for further details.

Also note that ApplicationContextInitializer semantics overlap to
some degree with Servlet 3.0's notion of ServletContainerInitializer
classes. As Spring 3.1 development progresses, we'll likely see
these two come together and further influence one another.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3882 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 09:57:57 +00:00
Keith Donald 61d54ae436 Favor convertValue(Object, TypeDescriptor) where possible and TypedValue(Object); check with Andy on Selection and Projection TypedValue usage
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3881 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 06:32:21 +00:00
Keith Donald 97033d66fb switched to better encapsulated convert(Object, TypeDescriptor) where possible
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3880 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 05:57:25 +00:00
Keith Donald 5403913103 added call to applyIndexedObject to build nested source element type descriptor from element value
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3879 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 04:41:21 +00:00
Keith Donald 76443f55c1 support for empty collection->collection. map->map, collection->array conversion
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3878 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-07 03:24:24 +00:00
Keith Donald 75f36d291a getPropertyTypeDescriptor bug fixes
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3876 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-06 23:12:00 +00:00
Keith Donald d3d7951265 added forNestedType(MethodParameter) for resolution of nested parameter types for collection, array, and map parameter types
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3875 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-06 21:59:34 +00:00
Keith Donald 66814f1235 forNestedType usage clarification
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3873 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-06 18:33:50 +00:00
Chris Beams 6364c02427 Polish Javadoc for PropertySource implementations
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3868 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-06 07:43:03 +00:00
Keith Donald ed2a257e69 added initial support for handling unknown nested type values when converting collections; now favor factory method for constructing nested type descriptors for clarity (made constructor private); improved javadoc
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3867 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-06 05:14:49 +00:00
Chris Beams 0821b2c6c2 Polish (Mutable)PropertySources
* PropertySources is now an Iterable<PropertySource> in favor of
  exposing an asList() method
* Otherwise reduced the set of methods exposed by PropertySources to the
  absolute minimum
* Added Javadoc for both types and all methods

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3865 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-05 22:25:24 +00:00
Chris Beams 835a3f8d64 Refactor Environment and PropertySource
* Environment now extends PropertyResolver
* Environment no longer exposes resolver and sources
* PropertySource is String,Object instead of String,String
* PropertySource no longer assumes enumerability of property names
* Introduced EnumerablePropertySource for those that do have enumerable property names

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3862 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-05 22:24:14 +00:00
Juergen Hoeller a0ee194603 reduced BeanDefinition footprint by initializing Sets and Maps with 0 (SPR-7491)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3860 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-05 19:59:00 +00:00
Keith Donald cf4062ed33 method naming improvements; applyIndexObject call for array indexing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3851 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-05 16:54:03 +00:00
Keith Donald 1e2a8083a1 TypeDescriptor cleanup and general polishing; fixed a number of bugs related to TypeDescriptor usage in client code across beans and spel packages
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3846 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-05 05:49:33 +00:00
Chris Beams 1ac7b56caf M1 cut of environment, profiles and property work (SPR-7508)
Decomposed Environment interface into PropertySources, PropertyResolver
objects

    Environment interface and implementations are still present, but
    simpler.

    PropertySources container aggregates PropertySource objects;
    PropertyResolver provides search, conversion, placeholder
    replacement. Single implementation for now is
    PropertySourcesPlaceholderResolver

Renamed EnvironmentAwarePropertyPlaceholderConfigurer to
PropertySourcesPlaceholderConfigurer

    <context:property-placeholder/> now registers PSPC by default, else
    PPC if systemPropertiesMode* settings are involved

Refined configuration and behavior of default profiles

    See Environment interface Javadoc for details

Added Portlet implementations of relevant interfaces:

    * DefaultPortletEnvironment
    * PortletConfigPropertySource, PortletContextPropertySource
    * Integrated each appropriately throughout Portlet app contexts

Added protected 'createEnvironment()' method to AbstractApplicationContext

    Subclasses can override at will to supply a custom Environment
    implementation.  In practice throughout the framework, this is how
    Web- and Portlet-related ApplicationContexts override use of the
    DefaultEnvironment and swap in DefaultWebEnvironment or
    DefaultPortletEnvironment as appropriate.

Introduced "stub-and-replace" behavior for Servlet- and Portlet-based
PropertySource implementations

    Allows for early registration and ordering of the stub, then
    replacement with actual backing object at refresh() time.

    Added AbstractApplicationContext.initPropertySources() method to
    support stub-and-replace behavior. Called from within existing
    prepareRefresh() method so as to avoid impact with
    ApplicationContext implementations that copy and modify AAC's
    refresh() method (e.g.: Spring DM).

    Added methods to WebApplicationContextUtils and
    PortletApplicationContextUtils to support stub-and-replace behavior

Added comprehensive Javadoc for all new or modified types and members

Added XSD documentation for all new or modified elements and attributes

    Including nested <beans>, <beans profile="..."/>, and changes for
    certain attributes type from xsd:IDREF to xsd:string

Improved fix for detecting non-file based Resources in
PropertiesLoaderSupport (SPR-7547, SPR-7552)

    Technically unrelated to environment work, but grouped in with
    this changeset for convenience.

Deprecated (removed) context:property-placeholder
'system-properties-mode' attribute from spring-context-3.1.xsd

    Functionality is preserved for those using schemas up to and including
    spring-context-3.0.  For 3.1, system-properties-mode is no longer
    supported as it conflicts with the idea of managing a set of property
    sources within the context's Environment object. See Javadoc in
    PropertyPlaceholderConfigurer, AbstractPropertyPlaceholderConfigurer
    and PropertySourcesPlaceholderConfigurer for details.

Introduced CollectionUtils.toArray(Enumeration<E>, A[])

Work items remaining for 3.1 M2:

    Consider repackaging PropertySource* types; eliminate internal use
    of SystemPropertyUtils and deprecate

    Further work on composition of Environment interface; consider
    repurposing existing PlaceholderResolver interface to obviate need
    for resolve[Required]Placeholder() methods currently in Environment.

    Ensure configurability of placeholder prefix, suffix, and value
    separator when working against an AbstractPropertyResolver

    Add JNDI-based Environment / PropertySource implementatinos

    Consider support for @Profile at the @Bean level

    Provide consistent logging for the entire property resolution
    lifecycle; consider issuing all such messages against a dedicated
    logger with a single category.

    Add reference documentation to cover the featureset.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3839 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-03 09:04:34 +00:00
Sam Brannen 924b8e11ea [SPR-7850][SPR-7851] Upgraded to JUnit 4.8.1 and TestNG 5.12.1; added changelog entries for 3.1.0.M1.
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3838 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-30 08:00:58 +00:00
Chris Beams 7ac69dff5f Normalize indentation of Apache license URL
In accordance with recommendations at
http://www.apache.org/licenses/LICENSE-2.0.html.

A number of classes had strayed from this format, now all
are the same.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3831 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-22 21:40:19 +00:00
Arjen Poutsma a32894ca31 Removed JDK 1.6 usage
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3830 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-22 10:23:34 +00:00
Chris Beams 5898259f1e Fix breaking logic around getFilename() call
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3816 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-15 17:34:31 +00:00
Chris Beams e78ced16b1 Improved fix for detecting non-file based Resources in PropertiesLoaderSupport (SPR-7547, SPR-7552)
Use instanceof check against AbstractFileResolvingResource instead of
try/catch around resource.getFilename() call.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3815 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-15 17:09:31 +00:00
Chris Beams 008fa66cee Eliminate PropertySourceAggregator interface
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3811 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-08 07:59:55 +00:00
Chris Beams 7d3a3e872f Expose Environment ConfigurationService
AbstractEnvironment delegates to an underlying ConfigurationService when
processing methods such as getProperty(String name, Class<?> targetType)

Accessor methods have been added to the ConfigurableEnvironment
interface that allow this service to be updated or replaced.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3810 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-08 07:59:41 +00:00
Chris Beams 2a4e1c98da Eliminate reserved 'default' profile (SPR-7778)
There is no longer a reserved default profile named 'default'. Rather,
users must explicitly specify a default profile or profiles via

    ConfigurableEnvironment.setDefaultProfiles(String...)
        - or -
    spring.profile.default="pD1,pD2"

Per above, the setDefaultProfile(String) method now accepts a variable
number of profile names (one or more).  This is symmetrical with the
existing setActiveProfiles(String...) method.

A typical scenario might involve setting both a default profile as a
servlet context property in web.xml and then setting an active profile
when deploying to production.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3809 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-08 07:59:25 +00:00
Chris Beams c2996bebcd Use dot notation rather than camel case for profile props (SPR-7508)
Before this change, the following properties could be used to manipulate
Spring profile behavior:

    -DspringProfiles=p1,p2
    -DdefaultSpringProfile=pD

These properties have been renamed to follow usual Java conventions for
property naming:

    -Dspring.profile.active=p1,p2
    -Dspring.profile.default=pD



git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3806 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-05 20:14:26 +00:00
Chris Beams f455b1e89a Support default profile (SPR-7508, SPR-7778)
'default' is now a reserved profile name, indicating
that any beans defined within that profile will be registered
unless another profile or profiles have been activated.

Examples below are expressed in XML, but apply equally when
using the @Profile annotation.

EXAMPLE 1:

        <beans>
            <beans profile="default">
                <bean id="foo" class="com.acme.EmbeddedFooImpl"/>
            </beans>
            <beans profile="production">
                <bean id="foo" class="com.acme.ProdFooImpl"/>
            </beans>
        </beans>

    In the case above, the EmbeddedFooImpl 'foo' bean will be
    registered if:
        a) no profile is active
        b) the 'default' profile has explicitly been made active

    The ProdFooImpl 'foo' bean will be registered if the 'production'
    profile is active.

EXAMPLE 2:

        <beans profile="default,xyz">
            <bean id="foo" class="java.lang.String"/>
        </beans>

    Bean 'foo' will be registered if any of the following are true:
        a) no profile is active
        b) 'xyz' profile is active
        c) 'default' profile has explicitly been made active
        d) both (b) and (c) are true

Note that the default profile is not to be confused with specifying no
profile at all.  When the default profile is specified, beans are
registered only if no other profiles are active; whereas when no profile
is specified, bean definitions are always registered regardless of which
profiles are active.

The default profile may be configured programmatically:

    environmnent.setDefaultProfile("embedded");

or declaratively through any registered PropertySource, e.g. system properties:

    -DdefaultSpringProfile=embedded

Assuming either of the above, example 1 could be rewritten as follows:

        <beans>
            <beans profile="embedded">
                <bean id="foo" class="com.acme.EmbeddedFooImpl"/>
            </beans>
            <beans profile="production">
                <bean id="foo" class="com.acme.ProdFooImpl"/>
            </beans>
        </beans>

It is unlikely that use of the default profile will make sense in
conjunction with a statically specified 'springProfiles' property.
For example, if 'springProfiles' is specified as a web.xml context
param, that profile will always be active for that application,
negating the possibility of default profile bean definitions ever
being registered.

The default profile is most useful for ensuring that a valid set of
bean definitions will always be registered without forcing users
to explictly specify active profiles.  In the embedded vs. production
examples above, it is assumed that the application JVM will be started
with -DspringProfiles=production when the application is in fact in
a production environment.  Otherwise, the embedded/default profile bean
definitions will always be registered.


git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3804 50f2f4bb-b051-0410-bef5-90022cba6387
2010-12-01 09:01:58 +00:00
Chris Beams 45e5b46fc2 Merge 3.1.0 development branch into trunk
Branch in question is 'env' branch from git://git.springsource.org/sandbox/cbeams.git; merged into
git-svn repository with:

    git merge -s recursive -Xtheirs --no-commit env

No merge conflicts, but did need to

    git rm spring-build

prior to committing.

With this change, Spring 3.1.0 development is now happening on SVN
trunk. Further commits to the 3.0.x line will happen in an as-yet
uncreated SVN branch.  3.1.0 snapshots will be available
per the usual nightly CI build from trunk.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3782 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-25 19:48:20 +00:00
Juergen Hoeller bbb728568e optimized AnnotationUtils findAnnotation performance for repeated search on same interfaces (SPR-7630)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3764 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-14 23:06:45 +00:00
Juergen Hoeller 5d4b7ee227 StringToArray/CollectionConverter trims element values before trying to convert them (SPR-7657)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3761 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-14 19:44:26 +00:00
Juergen Hoeller 2e9fe246e7 polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3757 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-14 00:30:07 +00:00
Arjen Poutsma 836928a116 SPR-7620 - StaxEventContentHandler does not set Location for StartDocument event
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3746 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-12 09:50:39 +00:00
Arjen Poutsma 2eabb640f5 SPR-7621 - AbstractStaxContentHandler sets NamespaceContext on every start/end element
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3745 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-12 09:41:23 +00:00
Arjen Poutsma b5e37c6e22 SPR-7621 - AbstractStaxContentHandler sets NamespaceContext on every start/end element
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3744 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-12 09:35:23 +00:00
Juergen Hoeller 4e4dfe5e34 fixed package declaration
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3743 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-11 21:26:32 +00:00
Juergen Hoeller 9332a9eb11 polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3741 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-11 21:15:26 +00:00
Juergen Hoeller 7fc788a676 revised initial cut of serializer package; moved Converter adapters to sub-package 'support'
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3740 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-11 21:15:12 +00:00
Juergen Hoeller 99d4de564f polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3739 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-11 20:03:40 +00:00
Mark Fisher 759d182e4e SPR-7627 added Serializer and Deserializer strategies, Converter adapters, and default implementations
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3735 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-11 17:36:18 +00:00
Juergen Hoeller 1f72f746e6 polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3732 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-10 21:09:59 +00:00
Juergen Hoeller 0ae66ec741 fixed detection of element type in case of nested collections (SPR-7569)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3731 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-10 21:09:43 +00:00
Juergen Hoeller a2aea5054d revised "ClassUtils.isAssignable" semantics to cover primitives vs wrappers in both directions (SPR-7610)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3704 50f2f4bb-b051-0410-bef5-90022cba6387
2010-10-01 21:50:25 +00:00
Juergen Hoeller bb004e3ce7 fixed exists() check for resources in zipped files (SPR-7559)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3699 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-29 14:45:44 +00:00
Juergen Hoeller 17cc53d31d fixed findPlaceholderEndIndex to work with a custom suffix as well (SPR-7574)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3697 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-29 14:01:54 +00:00
Chris Beams 781e1fec1b Fix assumption about file-based Resources in PropertiesLoaderSupport (SPR-7547)
When using PropertiesLoaderSupport implementations (principally
PropertyPlaceholderConfigurer), an assumption was made that any
Resource representing a set of properties must be file-based.  SPR-7547
exposed the fact that if a non-file-based Resource implementation such
as ByteArrayResource were passed in, an IllegalStateException would be thrown
from the AbstractResource base class' implementation of getFilename().

This is now patched, and PropertiesLoaderSupport implementations treat
Resource implementations equally, regardless of file-orientation.

See also SPR-7552.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3680 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-13 20:23:26 +00:00
Juergen Hoeller 15a9570e95 polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3673 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-09 22:14:36 +00:00
Arjen Poutsma 4904769bd8 Added XMLEventStreamWriter
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3656 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-08 12:52:23 +00:00
Arjen Poutsma 067108d063 Small Stax fixes.
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3654 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-08 09:45:18 +00:00
Arjen Poutsma a3cc0e54ce Small Stax fixes.
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3653 50f2f4bb-b051-0410-bef5-90022cba6387
2010-09-08 08:42:09 +00:00