Browse Source
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2510 50f2f4bb-b051-0410-bef5-90022cba6387pull/1/head
12 changed files with 301 additions and 72 deletions
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.web.servlet.config; |
||||
|
||||
import java.util.List; |
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition; |
||||
import org.springframework.beans.factory.config.BeanDefinitionHolder; |
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser; |
||||
import org.springframework.beans.factory.xml.ParserContext; |
||||
import org.springframework.util.xml.DomUtils; |
||||
import org.springframework.web.servlet.HandlerInterceptor; |
||||
import org.w3c.dom.Element; |
||||
|
||||
/** |
||||
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses the {@code interceptors} element to configure |
||||
* a set of global Spring MVC {@link HandlerInterceptor HandlerInterceptors}. |
||||
* The set is expected to be configured by type on each registered HandlerMapping. |
||||
* |
||||
* @author Keith Donald |
||||
* @since 3.0 |
||||
*/ |
||||
class InterceptorsBeanDefinitionParser implements BeanDefinitionParser { |
||||
|
||||
public BeanDefinition parse(Element element, ParserContext parserContext) { |
||||
List<Element> beans = DomUtils.getChildElementsByTagName(element, "bean"); |
||||
for (Element bean : beans) { |
||||
BeanDefinitionHolder beanHolder = parserContext.getDelegate().parseBeanDefinitionElement(bean); |
||||
parserContext.getDelegate().decorateBeanDefinitionIfRequired(bean, beanHolder); |
||||
parserContext.getReaderContext().registerWithGeneratedName(beanHolder.getBeanDefinition()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.web.servlet.config; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition; |
||||
import org.springframework.beans.factory.support.ManagedMap; |
||||
import org.springframework.beans.factory.support.RootBeanDefinition; |
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser; |
||||
import org.springframework.beans.factory.xml.ParserContext; |
||||
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; |
||||
import org.springframework.web.servlet.mvc.ParameterizableViewController; |
||||
import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter; |
||||
import org.w3c.dom.Element; |
||||
|
||||
/** |
||||
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses a {@code view-controller} element to register |
||||
* a {@link ParameterizableViewController}. Will also register a {@link SimpleUrlHandlerMapping} for view controllers. |
||||
* |
||||
* @author Keith Donald |
||||
* @since 3.0 |
||||
*/ |
||||
class ViewControllerBeanDefinitionParser implements BeanDefinitionParser { |
||||
|
||||
private String handlerAdapterBeanName; |
||||
|
||||
private String handlerMappingBeanName; |
||||
|
||||
public BeanDefinition parse(Element element, ParserContext parserContext) { |
||||
Object source = parserContext.extractSource(element); |
||||
if (this.handlerAdapterBeanName == null) { |
||||
RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(SimpleControllerHandlerAdapter.class); |
||||
handlerAdapterDef.setSource(source); |
||||
this.handlerAdapterBeanName = parserContext.getReaderContext().registerWithGeneratedName(handlerAdapterDef); |
||||
} |
||||
RootBeanDefinition handlerMappingDef; |
||||
if (this.handlerMappingBeanName == null) { |
||||
handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class); |
||||
handlerMappingDef.setSource(source); |
||||
handlerMappingDef.getPropertyValues().add("order", "1"); |
||||
this.handlerMappingBeanName = parserContext.getReaderContext().registerWithGeneratedName(handlerMappingDef); |
||||
} else { |
||||
handlerMappingDef = (RootBeanDefinition) parserContext.getReaderContext().getRegistry().getBeanDefinition(this.handlerMappingBeanName); |
||||
} |
||||
RootBeanDefinition viewControllerDef = new RootBeanDefinition(ParameterizableViewController.class); |
||||
viewControllerDef.setSource(source); |
||||
if (element.hasAttribute("view-name")) { |
||||
viewControllerDef.getPropertyValues().add("viewName", element.getAttribute("view-name")); |
||||
} |
||||
Map<String, BeanDefinition> urlMap; |
||||
if (handlerMappingDef.getPropertyValues().contains("urlMap")) { |
||||
urlMap = (Map<String, BeanDefinition>) handlerMappingDef.getPropertyValues().getPropertyValue("urlMap").getValue(); |
||||
} else { |
||||
urlMap = new ManagedMap<String, BeanDefinition>(); |
||||
handlerMappingDef.getPropertyValues().add("urlMap", urlMap); |
||||
} |
||||
urlMap.put(element.getAttribute("path"), viewControllerDef); |
||||
return null; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" |
||||
xmlns:mvc="http://www.springframework.org/schema/mvc" |
||||
xmlns:p="http://www.springframework.org/schema/p" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
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"> |
||||
|
||||
<mvc:annotation-driven /> |
||||
|
||||
<mvc:interceptors> |
||||
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="lang" /> |
||||
</mvc:interceptors> |
||||
|
||||
|
||||
</beans> |
||||
@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" |
||||
xmlns:mvc="http://www.springframework.org/schema/mvc" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
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"> |
||||
|
||||
<mvc:annotation-driven /> |
||||
|
||||
<mvc:view-controller path="/foo" /> |
||||
|
||||
<mvc:view-controller path="/bar" view-name="baz" /> |
||||
|
||||
<mvc:interceptors> |
||||
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> |
||||
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" /> |
||||
</mvc:interceptors> |
||||
|
||||
</beans> |
||||
Loading…
Reference in new issue