Spring java 基于配置拒绝工作
Spring java based configuration refuses to work
我有一个 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 debug jwm,看看bean是否初始化了,断点是否真的被传递了。所以这个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 却起作用?
注:
除 CookieLocaleResolver 和 ResourceBundleMessageSource 之外,所有其他基于 java 的配置都有效。
在 Spring MVC 中,bean 的 name/id 检测到了 LocaleResolver
,为此使用了魔法名称 localeResolver
(请参阅 DispatcherServlet
s javadoc).在 XML 中,您的 bean 的 id 与此匹配。
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver cookieLocaleResolver() { ... }
}
当使用 java 配置时,该方法默认用作 bean id。因此,在您的情况下,您会得到一个 ID 为 cookieLocaleResolver
的 bean。
要解决此问题,只需将您的方法重命名为 localeResolver
而不是 cookieLocaleResolver
。
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver localeResolver() { ... }
}
另一个解决方案是指定 @Bean
注释的 name
属性。
@Configuration
public class LocaleConfiguration {
@Bean(name={"localeResolver"})
public CookieLocaleResolver cookieLocaleResolver() { ... }
}
我有一个 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 debug jwm,看看bean是否初始化了,断点是否真的被传递了。所以这个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 却起作用?
注:
除 CookieLocaleResolver 和 ResourceBundleMessageSource 之外,所有其他基于 java 的配置都有效。
在 Spring MVC 中,bean 的 name/id 检测到了 LocaleResolver
,为此使用了魔法名称 localeResolver
(请参阅 DispatcherServlet
s javadoc).在 XML 中,您的 bean 的 id 与此匹配。
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver cookieLocaleResolver() { ... }
}
当使用 java 配置时,该方法默认用作 bean id。因此,在您的情况下,您会得到一个 ID 为 cookieLocaleResolver
的 bean。
要解决此问题,只需将您的方法重命名为 localeResolver
而不是 cookieLocaleResolver
。
@Configuration
public class LocaleConfiguration {
@Bean
public CookieLocaleResolver localeResolver() { ... }
}
另一个解决方案是指定 @Bean
注释的 name
属性。
@Configuration
public class LocaleConfiguration {
@Bean(name={"localeResolver"})
public CookieLocaleResolver cookieLocaleResolver() { ... }
}