我需要将@Bean SpringTemplateEngine放在ApplicationConfig中,以便可以将其自动关联到生成电子邮件的@Component中。 (请参见Thymeleaf-Spring4 unable to autowire TemplateEngineRich HTML email in Spring with Thymeleaf)。因此,@Bean(name =“ messageSource”)也必须位于ApplicationConfig中。但是,我有一个扩展了WebMvcConfigWebMvcConfigurationSupport,方法@Override Validator getValidator()需要使用messageSource()到setValidationMessageSource。但是,由于我将其移至ApplicationConfig,所以我不知道如何从WebMvcConfig获得它。我从spring-mvc-quickstart-archetypekolorobot开始。也许没有找到一个全新的配置原型,这里的人可以为我指出一个有用的方向。

ApplicationConfig的相关代码

@Configuration
@ComponentScan(basePackageClasses = Application.class, excludeFilters = @Filter ({Controller.class, Configuration.class}))
class ApplicationConfig {
*** Incomplete Example ***
@Bean(name = "messageSource")
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename(MESSAGE_SOURCE);
    messageSource.setCacheSeconds(5);
    return messageSource;
}

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    Set<TemplateResolver> resolvers = new HashSet<TemplateResolver>();
    resolvers.add(classLoaderTemplateResolver());
    resolvers.add(mvcTemplateResolver());
    templateEngine.setTemplateResolvers(resolvers);
    templateEngine.setMessageSource(messageSource());
    templateEngine.addDialect(new SpringSecurityDialect());
    return templateEngine;
}
}


以及WebMvcConfig的相关代码

@Configuration
@ComponentScan(basePackageClasses = {Application.class}, includeFilters = @Filter (Controller.class), useDefaultFilters = false)
class WebMvcConfig extends WebMvcConfigurationSupport {
*** Incomplete Example ***
@Override
public Validator getValidator() {
    LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
    validator.setValidationMessageSource(messageSource());
    return validator;
}
}


问题似乎是我无法将getValidator()移至ApplicationConfig(),因为它必须覆盖WebMvcConfigurationSupport方法。

最佳答案

我通过创建两个单独的SpringTemplateEngine配置使其工作,一个在MvcWebConfig中用于视图渲染,另一个在ApplicationConfig中用于处理电子邮件。我将电子邮件放在单独的文件中,并根据文档将其称为setTemplateEngineMessageSource而不是setMessageSource。

关于java - Spring bean messageSouce不能同时在ApplicationConfig和WebMvcConfig中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25559659/

10-11 00:19