基于Spring java的配置拒绝工作

时间:2015-03-04 08:19:41

标签: java spring configuration

我有一个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。

1 个答案:

答案 0 :(得分:0)

在Spring MVC中,bean的名称/ id检测到LocaleResolver,为此使用了魔术名localeResolver(参见DispatcherServlets 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() { ... }

}