簡體   English   中英

Spring 3.1:如何注入在不同配置類中創建的bean

[英]Spring 3.1: How do I inject a bean created in a different configuration class

我只是使用Spring 3.1設置一個Web應用程序,我試圖通過使用java配置來實現這一點。 我有兩個配置類“AppConfig”(通用bean定義)和“WebConfig”(Spring MVC配置)。 如何引用已在WebConfig類中的AppConfig中聲明的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時,我只是調用它的setup方法,但是當bean在另一個類中聲明時,我顯然不能這樣做。

非常感謝您的建議!

配置也是bean,因此您可以使用@Autowired

public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private Validator validator;

    ...
}

有兩種方法可以做到:

public class WebConfig {
    @Autowired
    AppConfig appconfig;

    ...
}

或者,正如Aaron Digulla所說:

public class WebConfig {
    @Autowired
    Validator validator;

    ...
}

我更喜歡第一種形式,一種是自動裝配,你可以訪問整個配置,然后你可以通過調用theNewBean.setValidator(appConfig.validator());來訪問它的bean theNewBean.setValidator(appConfig.validator());

我認為Aaron Digulla和Amir Pashazadeh都是正確的,但自從JSR 330推出以來,還有另一個注釋。 您也可以使用@Inject

@Inject
private Validator validator;

http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM