Commit Graph

621 Commits

Author SHA1 Message Date
Keith Donald c3a037d7be added new ConverterRegistry operation; polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4356 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-24 03:47:50 +00:00
Keith Donald 00bcadcbe5 added symmetry to ToString converters: SPR-8306
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4355 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-23 23:00:43 +00:00
Sam Brannen 1b71b04a3b Added Eclipse project dependency on org.springframework.asm
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4354 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-23 17:18:14 +00:00
Keith Donald 02d58b6a97 SPR-8364
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4348 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-23 07:38:27 +00:00
Keith Donald 888da26094 revised findCommonElement handling within TypeDescriptor.forObject(Object); we now fully introspect the collection elements to resolve the common type. We also support nested introspection e.g. collections of collections. Object.class is used to indicate no common type, and TypeDescriptor.NULL is used to indicate a null element value
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4347 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-23 05:21:02 +00:00
Keith Donald c9789d3a37 moved applyIndexedObject internal, now invoked inside forObject static factory method
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4346 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-23 01:08:18 +00:00
Keith Donald c42976ba7a SPR-8364
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4345 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-22 19:10:40 +00:00
Chris Beams a9530596bf Guard against null in #visitInnerClass
Issue: SPR-8358,SPR-8186

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4344 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-21 01:39:50 +00:00
Chris Beams 0181ed3213 Introduce ClassMetadata#getMemberClassNames
ClassMetadata implementations can now introspect their member (nested)
classes. This will allow for automatic detection of nested
@Configuration types in SPR-8186.

Issue: SPR-8358,SPR-8186

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4342 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-21 01:20:03 +00:00
Chris Beams 2b6bcf470c Rename {DefaultWeb=>StandardServlet}Environment
Issue: SPR-8348

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4338 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:55:56 +00:00
Chris Beams cf19ecc5a7 Rename {Default=>Standard}Environment
Issue: SPR-8348

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4337 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:53:37 +00:00
Chris Beams 74cd20abeb Polish Environment-related Javadoc
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4336 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:50:41 +00:00
Chris Beams 3fcb25c1c6 Introduce AbstractEnvironment#customizePropertySources
This new hook in the AbstractEnvironment lifecycle allows for more
explicit and predictable customization of property sources by
subclasses.  See Javadoc and existing implementations for detail.

Issue: SPR-8354

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4335 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:50:14 +00:00
Chris Beams ebea9ec66c Introduce reserved default profile support
AbstractEnvironment and subclasses now register a reserved default
profile named literally 'default' such that with no action on the part
of the user, beans defined against the 'default' profile will be
registered - if no other profiles are explicitly activated.

For example, given the following three files a.xml, b.xml and c.xml:

    a.xml
    -----
    <beans> <!-- no 'profile' attribute -->
        <bean id="a" class="com.acme.A"/>
    </beans>

    b.xml
    -----
    <beans profile="default">
        <bean id="b" class="com.acme.B"/>
    </beans>

    c.xml
    -----
    <beans profile="custom">
        <bean id="c" class="com.acme.C"/>
    </beans>

bootstrapping all of the files in a Spring ApplicationContext as
follows will result in beans 'a' and 'b', but not 'c' being registered:

    ApplicationContext ctx = new GenericXmlApplicationContext();
    ctx.load("a.xml");
    ctx.load("b.xml");
    ctx.load("c.xml");
    ctx.refresh();
    ctx.containsBean("a"); // true
    ctx.containsBean("b"); // true
    ctx.containsBean("c"); // false

whereas activating the 'custom' profile will result in beans 'a' and
'c', but not 'b' being registered:

    ApplicationContext ctx = new GenericXmlApplicationContext();
    ctx.load("a.xml");
    ctx.load("b.xml");
    ctx.load("c.xml");
    ctx.getEnvironment().setActiveProfiles("custom");
    ctx.refresh();
    ctx.containsBean("a"); // true
    ctx.containsBean("b"); // false
    ctx.containsBean("c"); // true

that is, once the 'custom' profile is activated, beans defined against
the the reserved default profile are no longer registered. Beans not
defined against any profile ('a') are always registered regardless of
which profiles are active, and of course beans registered
against specific active profiles ('c') are registered.

The reserved default profile is, in practice, just another 'default
profile', as might be added through calling env.setDefaultProfiles() or
via the 'spring.profiles.default' property.  The only difference is that
the reserved default is added automatically by AbstractEnvironment
implementations.  As such, any call to setDefaultProfiles() or value set
for the 'spring.profiles.default' will override the reserved default
profile.  If a user wishes to add their own default profile while
keeping the reserved default profile as well, it will need to be
explicitly redeclared, e.g.:

    env.addDefaultProfiles("my-default-profile", "default")

The reserved default profile(s) are determined by the value returned
from AbstractEnvironment#getReservedDefaultProfiles().  This protected
method may be overridden by subclasses in order to customize the
set of reserved default profiles.

Issue: SPR-8203

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4334 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:49:15 +00:00
Chris Beams cd38a828d2 Remove AbstractEnvironment#getPropertyResolver
Method is obsolete now that Environment (thus AbstractEnvironment as
well) implements the ConfigurablePropertyResolver interface.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4333 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:48:19 +00:00
Chris Beams 71d713b604 Consolidate Environment tests
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4332 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-20 03:47:48 +00:00
Oliver Gierke 11383f27fb SPR-8336 - Fixed broken test case.
Converted the test to JUnit 4.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4309 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-14 06:44:51 +00:00
Oliver Gierke 6f41d8c68d SPR-8336 - Added constructor to AnnotationTypeFilter to allow matching interfaces as well.
Reviewed by Chris.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4308 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-14 06:22:44 +00:00
Sam Brannen 9ce25bc5e4 polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4291 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 20:09:08 +00:00
Chris Beams f9783127e9 Introduce ResourcePropertySource
Allows convenient creation of a Properties-based PropertySource from a
Spring Resource object or resource location string such as
"classpath:com/myco/app.properties" or "file:/path/to/file.properties"

Issue: SPR-8328

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4288 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 13:28:05 +00:00
Chris Beams 3f7d5120c9 Support 'required properties' precondition
Users may now call #setRequiredProperties(String...) against the
Environment (via its ConfigurablePropertyResolver interface) in order
to indicate which properties must be present.

Environment#validateRequiredProperties() is invoked by
AbstractApplicationContext during the refresh() lifecycle to perform
the actual check and a MissingRequiredPropertiesException is thrown
if the precondition is not satisfied.

Issue: SPR-8323

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4285 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 07:36:04 +00:00
Chris Beams 26e6c9f1df Pull up default getProperty variants to base class
Issue: SPR-8322

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4284 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 07:35:16 +00:00
Chris Beams 11cf5f0d3b Add default-value getProperty convenience variants
Issue: SPR-8322

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4283 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 06:09:06 +00:00
Chris Beams da914bcfb4 Introduce Ordered#NOT_ORDERED
To provide a reasonable default value for annotations that expose
int-returning #order attributes.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4263 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:07:41 +00:00
Chris Beams a091eb1c86 Introduce ReflectionUtils#getUniqueDeclaredMethods
This change is in support of certain polymorphism cases in
@Configuration class inheritance hierarchies.  Consider the following
scenario:

@Configuration
public abstract class AbstractConfig {
    public abstract Object bean();
}

@Configuration
public class ConcreteConfig {
    @Override
    @Bean
    public BeanPostProcessor bean() { ... }
}

ConcreteConfig overrides AbstractConfig's #bean() method with a
covariant return type, in this case returning an object of type
BeanPostProcessor.  It is critically important that the container
is able to detect the return type of ConcreteConfig#bean() in order
to instantiate the BPP at the right point in the lifecycle.

Prior to this change, the container could not do this.
AbstractAutowireCapableBeanFactory#getTypeForFactoryMethod called
ReflectionUtils#getAllDeclaredMethods, which returned Method objects
for both the Object and BeanPostProcessor signatures of the #bean()
method.  This confused the implementation sufficiently as not to
choose a type for the factory method at all.  This means that the
BPP never gets detected as a BPP.

The new method being introduced here, #getUniqueDeclaredMethods, takes
covariant return types into account, and filters out duplicates,
favoring the most specific / narrow return type.

Additionally, it filters out any CGLIB 'rewritten' methods, which
is important in the case of @Configuration classes, which are
enhanced by CGLIB.  See the implementation for further details.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4262 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:07:25 +00:00
Chris Beams 56b5ea610c Process all meta and local @Import declarations
Includes the introduction of AnnotationUtils#findAllAnnotationAttributes
to support iterating through all annotations declared on a given type
and interrogating each for the presence of a meta-annotation. See tests
for details.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4258 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:05:15 +00:00
Chris Beams e8d1df5037 Fix generics and serialization warnings
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4249 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:00:14 +00:00
Chris Beams 36734d011a Remove unused MethodMetadata#getMethodReturnType
Introduced to support checking return types on @Bean methods but never
actually used.  May be reintroduced as necessary in the future.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4248 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 18:59:26 +00:00
Chris Beams 6c63e682a0 Introduce PropertyResolver#getPropertyAsClass
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4247 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 18:59:05 +00:00
Chris Beams 0b06055095 Rename Property{SourcesProperty}ResolverTests
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4246 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 18:58:41 +00:00
Chris Beams 0b1f42ef66 Update MockEnvironment / MockPropertySource types
Reflecting signature changes in getProperty() methods

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4245 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 18:57:41 +00:00
Sam Brannen 077328ea32 Added ? wildcard to suppress warnings.
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4200 50f2f4bb-b051-0410-bef5-90022cba6387
2011-04-09 13:29:59 +00:00
Sam Brannen 8ce2377066 fixed typo
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4191 50f2f4bb-b051-0410-bef5-90022cba6387
2011-04-07 08:00:23 +00:00
Rossen Stoyanchev 3473219bad Predictable index position for BindingResult keys and parameter annotation convenience methods in MethodParameter
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4149 50f2f4bb-b051-0410-bef5-90022cba6387
2011-03-31 14:16:37 +00:00
Chris Beams 2de526d31e Increase visibility of MapPropertySource constructor
Was protected due to oversight, now public.

Issue: SPR-8107

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4148 50f2f4bb-b051-0410-bef5-90022cba6387
2011-03-31 12:29:32 +00:00
Chris Beams 6e5a7ad072 Ignore fragile test dependent on debug symbols
Issue: SPR-8078

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4108 50f2f4bb-b051-0410-bef5-90022cba6387
2011-03-23 06:20:19 +00:00
Chris Beams ea5f28a8fd Remove TODOs related to profile logging
Issue: SPR-8031, SPR-7508, SPR-8057

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4097 50f2f4bb-b051-0410-bef5-90022cba6387
2011-03-15 12:57:43 +00:00
Chris Beams 29764a98b9 Resolve or eliminate Environment-related TODOs
Issue: SPR-8031, SPR-7508

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4096 50f2f4bb-b051-0410-bef5-90022cba6387
2011-03-15 12:57:12 +00:00
Chris Beams d57071b2f5 Polish imports
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4087 50f2f4bb-b051-0410-bef5-90022cba6387
2011-03-13 19:12:10 +00:00
Oliver Gierke 70f61b99d3 SPR-8005 - Made GenericTypeResolver.getTypeVariableMap(…) and resolvetype(…) public.
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4055 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-28 17:09:09 +00:00
Arjen Poutsma 237b9b509d Added equals and hashcode
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4029 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-22 13:33:24 +00:00
Juergen Hoeller 637117c51a exceptions thrown by @Scheduled methods will be propagated to a registered ErrorHandler (SPR-7723)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3994 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-10 22:50:16 +00:00
Juergen Hoeller e116123f3e polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3993 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-10 22:19:10 +00:00
Juergen Hoeller 4bd265f0a4 removed ConversionService/TypeConverter convenience methods in order to restore 3.0's SPI (for backwards compatibility with implementers)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3983 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-10 01:24:08 +00:00
Chris Beams adc9400905 Include license.txt and notice.txt in module JARs
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3967 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-09 06:56:40 +00:00
Chris Beams df4edc1c73 Rename spring.{profile}.active => {profiles}
Same for spring.profiles.default

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3960 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-08 19:07:46 +00:00
Juergen Hoeller df9857fa2b removed assertions
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3957 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-08 16:35:38 +00:00
Chris Beams dc22760978 Introduce FeatureSpecification support
Introduce FeatureSpecification interface and implementations

    FeatureSpecification objects decouple the configuration of
    spring container features from the concern of parsing XML
    namespaces, allowing for reuse in code-based configuration
    (see @Feature* annotations below).

    * ComponentScanSpec
    * TxAnnotationDriven
    * MvcAnnotationDriven
    * MvcDefaultServletHandler
    * MvcResources
    * MvcViewControllers

Refactor associated BeanDefinitionParsers to delegate to new impls above

    The following BeanDefinitionParser implementations now deal only
    with the concern of XML parsing.  Validation is handled by their
    corresponding FeatureSpecification object.  Bean definition creation
    and registration is handled by their corresponding
    FeatureSpecificationExecutor type.

    * ComponentScanBeanDefinitionParser
    * AnnotationDrivenBeanDefinitionParser (tx)
    * AnnotationDrivenBeanDefinitionParser (mvc)
    * DefaultServletHandlerBeanDefinitionParser
    * ResourcesBeanDefinitionParser
    * ViewControllerBeanDefinitionParser

Update AopNamespaceUtils to decouple from XML (DOM API)

    Methods necessary for executing TxAnnotationDriven specification
    (and eventually, the AspectJAutoProxy specification) have been
    added that accept boolean arguments for whether to proxy
    target classes and whether to expose the proxy via threadlocal.

    Methods that accepted and introspected DOM Element objects still
    exist but have been deprecated.

Introduce @FeatureConfiguration classes and @Feature methods

    Allow for creation and configuration of FeatureSpecification objects
    at the user level.  A companion for @Configuration classes allowing
    for completely code-driven configuration of the Spring container.

    See changes in ConfigurationClassPostProcessor for implementation
    details.

    See Feature*Tests for usage examples.

    FeatureTestSuite in .integration-tests is a JUnit test suite designed
    to aggregate all BDP and Feature* related tests for a convenient way
    to confirm that Feature-related changes don't break anything.
    Uncomment this test and execute from Eclipse / IDEA. Due to classpath
    issues, this cannot be compiled by Ant/Ivy at the command line.

Introduce @FeatureAnnotation meta-annotation and @ComponentScan impl

    @FeatureAnnotation provides an alternate mechanism for creating
    and executing FeatureSpecification objects.  See @ComponentScan
    and its corresponding ComponentScanAnnotationParser implementation
    for details.  See ComponentScanAnnotationIntegrationTests for usage
    examples

Introduce Default[Formatting]ConversionService implementations

    Allows for convenient instantiation of ConversionService objects
    containing defaults appropriate for most environments.  Replaces
    similar support originally in ConversionServiceFactory (which is now
    deprecated). This change was justified by the need to avoid use
    of FactoryBeans in @Configuration classes (such as
    FormattingConversionServiceFactoryBean). It is strongly preferred
    that users simply instantiate and configure the objects that underlie
    our FactoryBeans. In the case of the ConversionService types, the
    easiest way to do this is to create Default* subtypes. This also
    follows convention with the rest of the framework.

Minor updates to util classes

    All in service of changes above. See diffs for self-explanatory
    details.

    * BeanUtils
    * ObjectUtils
    * ReflectionUtils

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3954 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-08 14:42:33 +00:00
Chris Beams 6a68b44ca9 Make ObjectUtils.addObjectToArray() generic
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3951 50f2f4bb-b051-0410-bef5-90022cba6387
2011-02-08 13:01:29 +00:00
Juergen Hoeller 228a10ccdc get/stripFilenameExtension correctly ignores Unix-style hidden directories (SPR-7828)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3926 50f2f4bb-b051-0410-bef5-90022cba6387
2011-01-26 20:47:45 +00:00