2016-07-05 141 views
0

據我所知docs<mvc:annotation-driven/>只是一個註冊RequestMappingHandlerMapping,RequestMappingHandlerAdapter,ExceptionHandlerExceptionResolver和其他一些東西的快捷方式。如何用自定義bean替換<mvc:annotation-driven />?

我的問題是:如何在不使用<mvc:annotation-driven/>的情況下手動定義與提供<mvc:annotation-driven/>相同的功能?

I.e.我需要Spring配置的示例,該配置定義並配置由<mvc:annotation-driven/>快捷方式隱式創建的所有bean。換句話說,我需要編譯版本<mvc:annotation-driven/>(所有默認值)。

P.S.我需要它,因爲<mvc:annotation-driven/>不是那麼靈活,不提供方法來配置隱性登記豆(我想配置的RequestMappingHandlerMappingalwaysUseFullPath屬性)

+0

這很容易做到。如果bean是您需要的類型,請在'postProcessBeforeInitialization'中創建一個實現'BeanPostProcessor'的bean,並設置其他屬性。然後嘗試配置名稱空間所做的所有事情會容易得多。 –

回答

0

你可以通過刪除<mvc:annotation-driven/>標籤試圖定義所有的bean明確使用<bean>標籤和其他幫助標籤。

也看到這個Howto get rid of <mvc:annotation-driven />?

+1

該鏈接適用於舊版本的,其中提到的一些類已被棄用,並且已經從即將發佈的Spring 5版本中刪除。 –

+0

@ M.Deinum呀......我分享了它,因爲我雖然可以幫助OP。 –

1

你甚至可以做到這一點,而無需手動配置應有盡有。只需配置UrlPathHelper並將其設置爲配置。

<bean id="urlPathHelper" class="org.springframework.web.util.UrlPathHelper"> 
    <property name="alwaysUseFullPath" value="true" /> 
<bean> 

<mvc:annotation-driven path-helper="urlPathHelper" /> 

如果不工作,因爲你是在一箇舊版本的春用BeanPostProcessor,並在其postProcessBeforeInitialization做額外的設置/初始化你想要的。這將是繁瑣做試圖重新的<mvc:annotation-driven />so, just to set a single property. Instead create a bean which implements所有選項BeanPostProcessor`

public class WebMvcConfigurer implements BeanPostProcessor { 

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     if (bean instanceof RequestMappingHandlerMapping) { 
      ((RequestMappingHandlerMapping) bean).setAlwaysUseFullPath(true); 
     } 
     return bean; 
    } 

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
      return bean; 
    } 
} 

就在這個bean添加到您的xml配置和完成。