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; *
  1. Registering a AnnotationMethodHandlerAdapter bean for invoking annotated @Controller methods. * Will configure the HandlerAdapter's webBindingInitializer property for centrally configuring @Controller DataBinder instances: * *
* @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"> - +