2014-08-28 45 views
0

我需要將@Bean SpringTemplateEngine放在ApplicationConfig中,以便我可以@Autowire它到一個生成電子郵件的@Component。 (見Thymeleaf-Spring4 unable to autowire TemplateEngineRich HTML email in Spring with Thymeleaf)。因此@Bean(name =「messageSource」)也需要在ApplicationConfig之內。然而,我有一個WebMvcConfig延伸WebMvcConfigurationSupport和方法@Override Validator getValidator()需要setValidationMessageSource與messageSource()。然而,因爲我把它移到ApplicationConfig我不知道如何從WebMvcConfig得到它。我從kolorobot開始spring-mvc-quickstart-archetype。不是找到一個全新的配置原型,也許這裏的某個人可以指導我一個有用的方向。Spring bean messageSouce不能同時在ApplicationConfig和WebMvcConfig中

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

爲什麼不在WebMvcConfig中使用@Autowired MessageSource? – ndrone 2014-08-28 23:57:40

+0

我不確定我可以在配置部分自動裝配東西。我會反對它。 – 2014-08-29 15:22:25

回答

1

我通過創建兩個單獨的SpringTemplateEngine配置來工作,一個在MvcWebConfig中用於視圖渲染,另一個在ApplicationConfig中用於處理電子郵件。我將電子郵件放在一個單獨的文件中,並根據文檔調用setTemplateEngineMessageSource而不是setMessageSource。

相關問題