2012-08-17 55 views
2

用SpringMVC自帶的(不出所料)「MvcNamespaceHandler」處理的「MVC」命名空間中,這樣定義:是否可以重寫Spring命名空間處理程序?

public class MvcNamespaceHandler extends NamespaceHandlerSupport { 

public void init() { 
    registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser()); 
    registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser()); 
    registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());  
    registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser()); 
    registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser()); 
} 

}

我想修改的命名空間的行爲,使MVC:資源元素由自定義的ResourcesBeanDefinitionParser處理(在我的情況下,用自定義實現替換由Bean定義解析器創建的ResourcesHttpRequestHandler)。

我想知道是否有可能做到這一點,而無需經歷創建全新名稱空間的麻煩(如此處所述http://static.springsource.org/spring/docs/2.0.x/reference/extensible-xml.html)。

謝謝!

回答

1

您可以創建自定義命名空間註冊一個不同的ResourceHttpRequestHandler,但像你所說的,它絕對是工作的一個良好的數額。

更好的方法可以是簡單地明確地配置這種方式定義bean的本質ResourcesBeanDefinition做到這一點:

<bean name="resourceHandler" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler"> 
    <property name="locations"> 
     <list> 
      <value>/resources/</value> 
    </property> 
</bean> 

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="urlMap"> 
     <map> 
      <entry key="/resources/**" value-ref="resourceHandler"/> 
     </map> 
    </property> 
</bean> 

你根本可以在這裏替換爲您實現resourceHandler。

0

今天我有這個非常相同的問題(但對於上下文namespaceHandler)。我用黑客的方式完成了它。

在您的META-INF文件夾中創建一個名爲spring.handlers的文件,並放置一個覆蓋默認模式的聲明。在你的情況,這樣的事情:

http\://www.springframework.org/schema/mvc=org.springframework.web.servlet.config.MvcNamespaceHandler 

http\://www.springframework.org/schema/mvc=YOURBEANPATH. 

也許你會需要聲明spring.handlers文件,以字母比「S」更大開頭的名稱一個罐子內(以我的情況是't'),因爲春季將按照發現順序合併spring.handlers定義。

調試的信息,看看DefaultNamespaceHandlerResolver#getHandlerMappings

+0

JAR不一定按名稱的字母順序加載。這可能適用於你,但如果你添加另一個庫,將JAR移動到一個新的文件系統,它可能會變得非常糟糕...... – Kkkev 2012-08-17 21:30:32

+0

不錯的提示。我會嘗試以更有彈性的方式解決這個問題。 – user1607938 2012-08-17 21:42:15