我需要将@Bean SpringTemplateEngine
放在ApplicationConfig
中,这样我就可以@Autowire成为生成电子邮件的@Component。 (参见Thymeleaf-Spring4 unable to autowire TemplateEngine和Rich HTML email in Spring with Thymeleaf)。因此@Bean(name =“messageSource”)也需要在ApplicationConfig
中。但是,我有WebMvcConfig
扩展WebMvcConfigurationSupport
,方法@Override Validator getValidator()
需要setValidationMessageSource
和messageSource()。但是,由于我将其移至ApplicationConfig
,我不知道如何从WebMvcConfig
获取它。我从spring-mvc-quickstart-archetype开始使用kolorobot。而不是找到一个全新的配置原型,也许这里有人可以指出我有用的方向。
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方法。
答案 0 :(得分:1)
我通过创建两个单独的SpringTemplateEngine配置来实现它,一个在MvcWebConfig中进行视图渲染,一个在ApplicationConfig中用于处理电子邮件。我将电子邮件消息放在一个单独的文件中,并根据文档调用setTemplateEngineMessageSource而不是setMessageSource。