diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotatedControllersBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
similarity index 72%
rename from org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotatedControllersBeanDefinitionParser.java
rename to org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
index af0f0fea810..12aae160a8b 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotatedControllersBeanDefinitionParser.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.springframework.web.servlet.config;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -34,8 +33,8 @@ import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMa
import org.w3c.dom.Element;
/**
- * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses the {@code annotated-controllers} element to setup
- * @Controller configuration in a Spring MVC web application.
+ * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses the {@code annotation-driven} element to configure
+ * a Spring MVC web application.
*
* Responsible for:
*
@@ -43,16 +42,14 @@ import org.w3c.dom.Element;
* - Registering a AnnotationMethodHandlerAdapter bean for invoking annotated @Controller methods.
* Will configure the HandlerAdapter's
webBindingInitializer property for centrally configuring @Controller DataBinder instances:
*
- * - Configures the conversionService to be the bean named
conversionService if such a bean exists,
- * otherwise defaults to a fresh {@link ConversionService} instance created by the default {@link FormattingConversionServiceFactoryBean}.
- * - Configures the validator to be the bean named
validator if such a bean exists,
- * otherwise defaults to a fresh {@link Validator} instance created by the default {@link LocalValidatorFactoryBean} if the JSR-303 API is present in the classpath.
+ * - Configures the conversionService if specified, otherwise defaults to a fresh {@link ConversionService} instance created by the default {@link FormattingConversionServiceFactoryBean}.
+ *
- Configures the validator if specified, otherwise defaults to a fresh {@link Validator} instance created by the default {@link LocalValidatorFactoryBean} if the JSR-303 API is present in the classpath.
*
*
* @author Keith Donald
* @since 3.0
*/
-public class AnnotatedControllersBeanDefinitionParser implements BeanDefinitionParser {
+public class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
public BeanDefinition parse(Element element, ParserContext parserContext) {
Object source = parserContext.extractSource(element);
@@ -68,16 +65,18 @@ public class AnnotatedControllersBeanDefinitionParser implements BeanDefinitionP
return null;
}
+ // internal helpers
+
private BeanDefinitionHolder registerDefaultAnnotationHandlerMapping(Element element, Object source, ParserContext context) {
BeanDefinitionBuilder builder = createBeanBuilder(DefaultAnnotationHandlerMapping.class, source);
builder.addPropertyValue("order", 0);
- return registerBeanDefinition(new BeanDefinitionHolder(builder.getBeanDefinition(), "defaultAnnotationHandlerMapping"), context);
+ return registerBeanDefinition(builder.getBeanDefinition(), context);
}
private BeanDefinitionHolder registerAnnotationMethodHandlerAdapter(Element element, Object source, ParserContext context) {
BeanDefinitionBuilder builder = createBeanBuilder(AnnotationMethodHandlerAdapter.class, source);
builder.addPropertyValue("webBindingInitializer", createWebBindingInitializer(element, source, context));
- return registerBeanDefinition(new BeanDefinitionHolder(builder.getBeanDefinition(), "annotationMethodHandlerAdapter"), context);
+ return registerBeanDefinition(builder.getBeanDefinition(), context);
}
private BeanDefinition createWebBindingInitializer(Element element, Object source, ParserContext context) {
@@ -88,36 +87,37 @@ public class AnnotatedControllersBeanDefinitionParser implements BeanDefinitionP
}
private void addConversionService(BeanDefinitionBuilder builder, Element element, Object source, ParserContext context) {
- if (context.getRegistry().containsBeanDefinition("conversionService")) {
- builder.addPropertyReference("conversionService", "conversionService");
+ if (element.hasAttribute("conversion-service")) {
+ builder.addPropertyReference("conversionService", element.getAttribute("conversion-service"));
} else {
- builder.addPropertyValue("conversionService", createConversionService(element, source, context));
+ builder.addPropertyValue("conversionService", createDefaultConversionService(element, source, context));
}
}
private void addValidator(BeanDefinitionBuilder builder, Element element, Object source, ParserContext context) {
- if (context.getRegistry().containsBeanDefinition("validator")) {
- builder.addPropertyReference("validator", "validator");
+ if (element.hasAttribute("validator")) {
+ builder.addPropertyReference("validator", element.getAttribute("validator"));
} else {
- if (ClassUtils.isPresent("javax.validation.Validator", AnnotatedControllersBeanDefinitionParser.class.getClassLoader())) {
- builder.addPropertyValue("validator", createValidator(element, source, context));
+ if (ClassUtils.isPresent("javax.validation.Validator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader())) {
+ builder.addPropertyValue("validator", createDefaultValidator(element, source, context));
}
}
}
- private BeanDefinition createConversionService(Element element, Object source, ParserContext context) {
+ private BeanDefinition createDefaultConversionService(Element element, Object source, ParserContext context) {
BeanDefinitionBuilder builder = createBeanBuilder(FormattingConversionServiceFactoryBean.class, source);
return builder.getBeanDefinition();
}
- private BeanDefinition createValidator(Element element, Object source, ParserContext context) {
+ private BeanDefinition createDefaultValidator(Element element, Object source, ParserContext context) {
BeanDefinitionBuilder builder = createBeanBuilder(LocalValidatorFactoryBean.class, source);
return builder.getBeanDefinition();
}
- private BeanDefinitionHolder registerBeanDefinition(BeanDefinitionHolder holder, ParserContext context) {
- context.getRegistry().registerBeanDefinition(holder.getBeanName(), holder.getBeanDefinition());
- return holder;
+ private BeanDefinitionHolder registerBeanDefinition(BeanDefinition definition, ParserContext context) {
+ String beanName = context.getReaderContext().generateBeanName(definition);
+ context.getRegistry().registerBeanDefinition(beanName, definition);
+ return new BeanDefinitionHolder(definition, beanName);
}
private BeanDefinitionBuilder createBeanBuilder(Class> clazz, Object source) {
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java
index c0f6f91f7a9..43f8168d72c 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java
@@ -26,6 +26,6 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
public class MvcNamespaceHandler extends NamespaceHandlerSupport {
public void init() {
- registerBeanDefinitionParser("annotated-controllers", new AnnotatedControllersBeanDefinitionParser());
+ registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
}
}
diff --git a/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd b/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd
index f6ce54b79e6..4541dba9f94 100644
--- a/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd
+++ b/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd
@@ -10,11 +10,11 @@
-
+
diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
index f25ce9aac9b..0268f5f24ad 100644
--- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
+++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
@@ -39,10 +39,10 @@ public class MvcNamespaceTests {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
reader.loadBeanDefinitions(new ClassPathResource("mvc-config.xml", getClass()));
assertEquals(2, container.getBeanDefinitionCount());
- DefaultAnnotationHandlerMapping mapping = container.getBean("defaultAnnotationHandlerMapping", DefaultAnnotationHandlerMapping.class);
+ DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
assertNotNull(mapping);
assertEquals(0, mapping.getOrder());
- AnnotationMethodHandlerAdapter adapter = container.getBean("annotationMethodHandlerAdapter", AnnotationMethodHandlerAdapter.class);
+ AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
assertNotNull(adapter);
TestController handler = new TestController();
diff --git a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml
index 3525d84869a..032b2b4ba77 100644
--- a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml
+++ b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml
@@ -5,6 +5,6 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
-
+