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(请参阅 DispatcherServlets 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() { ... }

}