我有一个spring mvc应用程序,我使用这样的配置:
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver cookieLocaleResolver() {//
CookieLocaleResolver cookieLocaleResolver =
new CookieLocaleResolver();
cookieLocaleResolver.setCookieName("locale");
cookieLocaleResolver.setDefaultLocale(new Locale("ru"));
return cookieLocaleResolver;
}
}
我使用断点远程连接到tomcat调试jwm,并查看bean是否已初始化并且实际上是否正在传递断点。因此,豆是初始化的。但是它不能做我想做的事情。但如果我用这个:
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="locale"/>
<property name="defaultLocale" value="en"/>
</bean>
在applicationContext.xml中,它运行正常。我也在applicationContext.xml中使用它:
<context:component-scan base-package="com"/>
为什么你认为基于java的配置不起作用,但xml呢?
注意:
所有其他基于java的配置工作除了CookieLocaleResolver和ResourceBundleMessageSource。
答案 0 :(得分:0)
在Spring MVC中,bean的名称/ id检测到LocaleResolver
,为此使用了魔术名localeResolver
(参见DispatcherServlet
s javadoc)。在XML中,bean的id与此匹配。
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver cookieLocaleResolver() { ... }
}
使用java config时,默认情况下,该方法用作bean id。因此,在您的情况下,您将获得一个标识为cookieLocaleResolver
的bean。
要解决此问题,只需将您的方法重命名为localeResolver
,而不是cookieLocaleResolver
。
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver localeResolver() { ... }
}
另一种解决方案是指定name
注释的@Bean
属性。
@Configuration
public class LocaleConfiguration {
@Bean(name={"localeResolver"})
public CookieLocaleResolver cookieLocaleResolver() { ... }
}