Commit Graph

4195 Commits

Author SHA1 Message Date
Arjen Poutsma f01ba3249f Make HTTP methods a RequestCondition
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4287 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 10:38:30 +00:00
Chris Beams 0b64290194 Add MockEnvironment to .integration-tests
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4286 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 07:51:32 +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 653773574e Polish @Configuration Javadoc
Add note that nested @Configuration classes must be static.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4282 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-11 06:08:40 +00:00
Chris Beams 4c746017c5 Allow static modifier on @Bean methods
Declaring @Bean methods as 'static' is now permitted, whereas previously
it raised an exception at @Configuration class validation time.

A static @Bean method can be called by the container without requiring
the instantiation of its declaring @Configuration class. This is
particularly useful when dealing with BeanFactoryPostProcessor beans,
as they can interfere with the standard post-processing lifecycle
necessary to handle @Autowired, @Inject, @Value, @PostConstruct and
other annotations.

static @Bean methods cannot recieve CGLIB enhancement for scoping and
AOP concerns. This is acceptable in BFPP cases as they rarely if ever
need it, and should not in typical cases ever be called by another
@Bean method.  Once invoked by the container, the resulting bean will
be cached as usual, but multiple invocations of the static @Bean method
will result in creation of multiple instances of the bean.

static @Bean methods may not, for obvious reasons, refer to normal
instance @Bean methods, but again this is not likely a concern for BFPP
types. In the rare case that they do need a bean reference, parameter
injection into the static @Bean method is technically an option, but
should be avoided as it will potentially cause premature instantiation
of more beans that the user may have intended.

Note particularly that a WARN-level log message is now issued for any
non-static @Bean method with a return type assignable to BFPP.  This
serves as a strong recommendation to users that they always mark BFPP
@Bean methods as static.

See @Bean Javadoc for complete details.

Issue: SPR-8257, SPR-8269

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4281 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-10 11:55:41 +00:00
Chris Beams ae0dc34f29 Test interaction of @ComponentScan and @Import
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4280 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-10 11:54:37 +00:00
Arjen Poutsma 5d10187239 SPR-7354 - Added equivalent of JAX-RS @Consumes to Spring MVC
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4279 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-10 09:23:00 +00:00
Costin Leau 32121f3664 SPR-8256
+ doc updates

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4278 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-09 17:40:23 +00:00
Arjen Poutsma c05ee1467a Made comparators public, as they are needed elsewhere.
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4277 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-09 11:20:49 +00:00
Rossen Stoyanchev da3ad5623b Refine HandlerMethod registration to allow detection by handler instance as well as by bean name
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4276 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-08 19:31:29 +00:00
Chris Beams 11c31085fe Allow recursive use of @ComponentScan
Prior to this change, @ComponentScan annotations were only processed at
the first level of depth.  Now, the set of bean definitions resulting
from each declaration of @ComponentScan is checked for configuration
classes that declare @ComponentScan, and recursion is performed as
necessary.

Cycles between @ComponentScan declarations are detected as well. See
CircularComponentScanException.

Issue: SPR-8307

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4275 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-08 13:49:35 +00:00
Chris Beams b5d18feb55 Polish @EnableScheduling Javadoc
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4274 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-08 13:48:02 +00:00
Chris Beams 4f38c21f76 Rename AsyncConfigurer#get{+Async}Executor
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4273 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-07 09:32:03 +00:00
Chris Beams f0b8bbc04b Polish @EnableScheduling Javadoc
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4272 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-07 09:31:13 +00:00
Chris Beams fc3ccd1052 Expose return-value-handlers in mvc namespace
Mirroring the MvcConfigurer#addCustomReturnValueHandlers callback which
allows for providing a list of HandlerMethodReturnValueHandler types

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4271 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:13:44 +00:00
Chris Beams 9e0b7303b4 Rename RequestMapping types for concision
Remove 'Method' from RequestMappingHandlerMethodMapping and
RequestMappingHandlerMethodAdapter

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4270 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:13:05 +00:00
Chris Beams 210e278ce0 Rename DataBinderFactory subtypes for concision
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4269 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:12:14 +00:00
Chris Beams 078222d807 Introduce @EnableMvcConfiguration
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4268 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:11:19 +00:00
Chris Beams ae9e165d54 Introduce @EnableTransactionManagement
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4267 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:10:25 +00:00
Chris Beams fb059b3491 Introduce @EnableScheduling
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4266 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:09:24 +00:00
Chris Beams f8d97b009d Introduce @EnableAsync
Introduce @EnableAsync#order

AsyncAnnotationBeanPostProcessor's 'order' property is now mutable;
@EnableAsync's 'order()' attribute allows for setting it, but must
have a default value, thus uses the new Ordered#NOT_ORDERED
constant - a reserved negative number very unlikely to be otherwise
used that may be interpreted as 'not ordered', useful in annotation
defaulting scenarios where null is not an option.

Introduce first working cut of AsyncConfiguration

Remove AsyncCapability

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4265 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:08:53 +00:00
Chris Beams f6a4366ebd Introduce @Role
As a mechanism for setting the 'role' hint on BeanDefinitions created
via component-scanning or @Bean methods.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4264 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:08:10 +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 c61a0aeb83 Consolidate annotation processing constants
Consolidating internal bean name and aspect class name constats within
AnnotationConfigUtils to allow access from both the context.config
and context.annotation packages without creating a relationship between
the two of them (they are unrelated leaf nodes in the packaging
currently).

The .transaction module does not have a similar utils class and already
has a relationship from transaction.config -> transaction.annotation,
so placing the constants in .annotation.TransactionManagementCapability
to be referenced by .config.AnnotationDrivenBeanDefinitionParser

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4261 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:06:37 +00:00
Chris Beams 528ae46f9f Introduce ImportSelector interface
Allows @Enable* a layer of indirection for deciding which @Configuration
class(es) to @Import.

The @Import annotation may now accept @Configuration class literals
and/or ImportSelector class literals.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4260 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:06:02 +00:00
Chris Beams 7ef92dccfa Introduce ImportAware interface
@Configuration classes may implement ImportAware in order to be injected
with the AnnotationMetadata of their @Import'ing class.

Includes the introduction of a new PriorityOrdered
ImportAwareBeanPostProcessor that handles injection of the
importing class metadata.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4259 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:05:42 +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 0fa00811d7 Provide dedicated @ComponentScan processing
@ComponentScan is now checked for explicitly and handled immediately
when parsing @Configuration classes.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4257 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:04:35 +00:00
Chris Beams 962eea2d35 Delegate ComponentScanBDP environment to scanner
Enables @Profile filtering within ComponentScanBeanDefinitionParser

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4256 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:04:11 +00:00
Chris Beams c892028705 Remove "Feature" support introduced in 3.1 M1
Feature-related support such as @Feature, @FeatureConfiguration,
and FeatureSpecification types will be replaced by framework-provided
@Configuration classes and convenience annotations such as
@ComponentScan (already exists), @EnableAsync, @EnableScheduling,
@EnableTransactionManagement and others.

Issue: SPR-8012,SPR-8034,SPR-8039,SPR-8188,SPR-8206,SPR-8223,
SPR-8225,SPR-8226,SPR-8227

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4255 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:03:52 +00:00
Chris Beams e6f3fd2de0 Rename ConfigurationClassMethod => BeanMethod
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4254 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:01:56 +00:00
Chris Beams 84ace01244 Revert deprecation of BDRU#registerWithGeneratedName
The overloading necessary to preserve the new signature as well as
the old causes ambiguities leading to deprecation warnings in some
caller scenarios.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4253 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:01:35 +00:00
Chris Beams 8bc5338de6 Prevent empty calls to ACAC #register and #scan
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4252 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:01:11 +00:00
Chris Beams 791206060e Add comment on DisposableBean use in @Configuration
Issue: SPR-7901

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4251 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:00:55 +00:00
Chris Beams e21da602b7 Polish Javadoc
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4250 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 19:00:38 +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 0613ced0b2 polishing
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4244 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 15:35:40 +00:00
Sam Brannen ab05ddc486 [SPR-6184] Simplifying ContextLoader implmementation:
- Removed AbstractGenericContextLoader's createGenericApplicationContext() method.
- AnnotationConfigContextLoader now uses an AnnotatedBeanDefinitionReader instead of working with an AnnotationConfigApplicationContext.
- AnnotationConfigContextLoader now uses the supplied GenericApplicationContext to load configuration classes.


git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4243 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-06 12:05:56 +00:00
Rossen Stoyanchev 4bb26a9878 Resolve custom args after annotated args, set PATH_WITHIN_HANDLER_MAPPING attribute, and rename resolver for @ExceptionHandler methods
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4242 50f2f4bb-b051-0410-bef5-90022cba6387
2011-05-03 15:39:13 +00:00
Rossen Stoyanchev 18e98329db SPR-6909 Include URI template vars in data binding
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4241 50f2f4bb-b051-0410-bef5-90022cba6387
2011-04-26 11:54:54 +00:00
Chris Beams bb4f48dcb3 Automatically close SessionFactory objects
SessionFactory objects created by
SessionFactoryBuilderSupport#buildSessionFactory are now DisposableBean
proxies that call SessionFactory#close and release any threadlocal
DataSource object.

This is the same behavior that has always occurred during LSFBean and
ASFBean destruction lifecycles (and still does). This destruction logic
has now been factored out into
SessionFactoryBuilderSupport#closeHibernateSessionFactory such that all
SFB types can reuse it easily.

Note that LSFBean and ASFBean are subclasses, respectively, of SFBuilder
and ASFBuilder and they each must disable the DisposableBean proxying in
order to avoid duplicate attempts at closing the SessionFactory. See
the implementations of wrapSessionFactoryIfNeccesary() for details.

Issue: SPR-8114

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4240 50f2f4bb-b051-0410-bef5-90022cba6387
2011-04-26 10:15:30 +00:00
Chris Beams 999100e7a2 Fix typo in aop reference documentation
Issue: SPR-8268

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4239 50f2f4bb-b051-0410-bef5-90022cba6387
2011-04-26 07:44:40 +00:00
Rossen Stoyanchev 99a4e3bc0e SPR-7543 Add @PathVariables to the model
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4236 50f2f4bb-b051-0410-bef5-90022cba6387
2011-04-21 15:18:45 +00:00