据我所知docs,<mvc:annotation-driven/>
只是注册RequestMappingHandlerMapping
,RequestMappingHandlerAdapter
,ExceptionHandlerExceptionResolver
和其他一些内容的捷径。
我的问题是:如何在不使用<mvc:annotation-driven/>
的情况下手动定义提供<mvc:annotation-driven/>
的相同功能?
即。我需要Spring配置的示例,它定义和配置由<mvc:annotation-driven/>
快捷方式隐式创建的所有bean。换句话说,我需要<mvc:annotation-driven/>
的编译版本(包含所有默认值)。
P.S。我需要它,因为<mvc:annotation-driven/>
不是那么灵活,并且没有提供配置隐式注册bean的方法(我想配置alwaysUseFullPath
的{{1}}属性)
答案 0 :(得分: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配置即可。
答案 1 :(得分:0)
您可以尝试删除<mvc:annotation-driven/>
标记,并使用<bean>
标记和其他帮助标记明确定义您的所有bean。