2012-09-13 30 views
3

我剛剛使用Spring 3.1設置了一個Web應用程序,並試圖通過使用java配置來實現此目的。 我有兩個配置類「AppConfig」(一般的bean定義)和「WebConfig」(Spring MVC配置)。我如何引用已在WebConfig類的AppConfig中聲明的bean?Spring 3.1:如何注入在不同配置類中創建的bean

下面,AppConfig配置類中的驗證器應該使用來自WebConfig的messageSource。

的AppConfig:

@Configuration 
@ComponentScan(basePackages = { "com.example" }) 
public class AppConfig { 

    @Bean 
    public Validator validator() { 
     final LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); 
     validator.setValidationMessageSource(messageSource()); 
     return validator; 
    } 

} 

WebConfig:

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = { "com.example.common.web", "com.example.web" }) 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public ReloadableResourceBundleMessageSource messageSource() { 
     final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
     messageSource.setBasename("classpath:messages"); 
     return messageSource; 
    } 

} 

當我想引用來自同一配置類豆,我只需要調用它的設置方法,但我顯然無法做到這一點當bean在另一個類中聲明時。

您的建議將不勝感激!

回答

4

有兩種方法可以這樣做:

public class WebConfig { 
    @Autowired 
    AppConfig appconfig; 

    ... 
} 

,或者亞倫Digulla提到:

public class WebConfig { 
    @Autowired 
    Validator validator; 

    ... 
} 

我更喜歡第一種形式,用一個自動裝配就可以訪問整個配置,然後就可以訪問它豆,通過調用theNewBean.setValidator(appConfig.validator());

+2

第一種形式不允許你爲測試覆蓋bean。 –

+0

謝謝!我接受了這個答案,因爲它提供了更多信息。 –

6

配置有豆類,太,所以你可以使用@Autowired

public class WebConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    private Validator validator; 

    ... 
} 
+0

UPS,我會閉嘴!謝謝! :-) –

+3

+1他還可以在方法級別自動裝配驗證器,並將其作爲參數傳遞給方法驗證器(ReloadableResourceBundleMessageSource messageSource)。並且他想在'AppConfig'中自動裝入'ReloadableResourceBundleMessageSource messageSource' –

相關問題