3

我只是使用 Spring 3.1 设置一个 Web 应用程序,我正在尝试通过使用 java 配置来做到这一点。我有两个配置类“AppConfig”(通用 bean 定义)和“WebConfig”(Spring MVC 配置)。如何在 WebConfig 类中引用已在 AppConfig 中声明的 bean?

下面,AppConfig 配置类中的验证器应该使用来自 WebConfig 的 messageSource。

应用配置:

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

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

}

网络配置:

@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 在另一个类中声明时我显然不能这样做。

您的建议将不胜感激!

4

3 回答 3

6

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

public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private Validator validator;

    ...
}
于 2012-09-13T08:21:15.680 回答
4

有两种方法可以做到这一点:

public class WebConfig {
    @Autowired
    AppConfig appconfig;

    ...
}

或者,正如 Aaron Digulla 所说:

public class WebConfig {
    @Autowired
    Validator validator;

    ...
}

我更喜欢第一种形式,通过一次自动装配,您可以访问整个配置,然后您可以通过调用theNewBean.setValidator(appConfig.validator());.

于 2012-09-13T08:28:07.940 回答
2

我认为 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

于 2013-10-11T17:40:58.157 回答