-
Notifications
You must be signed in to change notification settings - Fork 38.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Doc: <mvc:annotation-driven> incompatible to override strategy of handler mappings [SPR-6524] #11190
Comments
Juergen Hoeller commented This is an intended effect to some degree: mvc:annotation-driven is simply not supposed to be combined with manual DefaultAnnotationHandlerMapping instances; this is designed as an either-or choice at present, quite similar to context:annotation-config and tx:annotation-driven. I'll quickly revisit this for GA, even if we might eventually stick with the current behavior as-is. Juergen |
Keith Donald commented What do you need to customize that requires a custom DefaultAnnotationHandlerMapping instance? |
Keith Donald commented Will address for GA as a Documentation issue. Users have an either-or choice here: either use the mvc namespace and its simplified configuration, or "unroll" to use bean-style config. We don't want to introduce complexity into the namespace options where we can help it--adding support for a custom handler mapping instance exposes complexity. Agreed though docs need to be better so this ticket will address that. |
Alex Rau commented My instance needs 2 properties to be set:
I see Juergen's point and I'm ok with the current state/behaviour. However I think it's a little bit a pitfall without additional/clear documentation what mvc:annotation-driven does under the hood (like in my case the hidden definition of a DefaultAnnotationHandlerMapping which magically kills an explicitly declared one). And my investigation stopped with reading the XSD... I'm not yet used to these kind of short-cut declarations (but in general I like them to be honest). My workaround right now is just unrolling the short-cut manually. Beside the documentation aspect perhaps a nice idea would be adding an optional parameter to the declaration for the handler mapping ? |
Aleksander Adamowski commented Keith, 3.0.GA is due today, and this and #11070 are the last two issues planned for the release. Half of the world is holding their breath, waiting for you to address these... |
Mahesh Yamsani commented DM Server is waiting for Spring 3 release https://issuetracker.springsource.com/browse/DMS-2252 |
Marc Logemann commented What was the solution for this issue since its marked as fixed? I also spent 3 hours debugging spring code just to see that there is some kind of conflict between custom DefaultAnnotationHandlerMapping and annotation-driven. I personally need the alwaysUseFullPath = true and i still want to use annotations for defining controllers. |
Rossen Stoyanchev commented Hi Marc, I believe the solution was to clarify the documentation. Just one quick note on the code-based configuration for Spring MVC available in Spring 3.1. It provides the equivalent of mvc:annotation-driven as well as an option to modify the resulting beans. See this post. If you wanted to give it a try you will need to use 3.1.0.BUILD-SNAPSHOT rather than the M2 release. |
Alex Rau opened SPR-6524 and commented
the mvc:annotation-driven feature breaks or at least does not conform to the implemented strategy in MVC that there is an implicit DefaultAnnotationHandlerMapping (D1) which can be replaced with custom parameterized versions (D2) of handler mappings.
As soon as someone wants to use the above short-cut "mvc:annotation-driven" there will be a DefaultAnnotationHandlerMapping (D3) which a) cannot be replaced with a custom version (D2) anymore and b) replaces the implicit one (D1). Even worse - developers declaring (D3) assuming they would override the implicit one (D1) will end up with two instances of DefaultAnnotationHandlerMapping (D2 and D3) resulting in duplicate registration of annotated controllers (component scan) and custom parameterization which will be without any effect as D2 seems to win over D3.
I think at least a dedicated property for the above declaration should be defined which allows passing in a custom DefaultAnnotationHandlerMapping along with the declaration (+ some clarifying documentation about this wouldn't be too bad).
Steps to reproduce:
declare in a web application context (e.g. using Spring's DispatcherServlet):
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<context:component-scan base-package="org.retroduction" use-default-filters="false">
<context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>
declare a java controller using
@Controller
start container with logging enabled and check logs for duplicate registration of the controller
Affects: 3.0 RC2, 3.0 RC3
Reference URL: http://forum.springsource.org/showthread.php?p=272494
Issue Links:
The text was updated successfully, but these errors were encountered: