3

Spring 3.1を使用してWebアプリケーションをセットアップしているだけで、Java構成を使用してこれを実行しようとしています。「AppConfig」(一般的なBean定義)と「WebConfig」(SpringMVC構成)の2つの構成クラスがあります。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が別のクラスで宣言されている場合は、明らかにこれを行うことができません。

あなたのアドバイスは大歓迎です!

4

3 に答える 3

6

構成もBeanであるため、次を使用できます。@Autowired

public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private Validator validator;

    ...
}
于 2012-09-13T08:21:15.680 に答える
4

これを行うには2つの方法があります。

public class WebConfig {
    @Autowired
    AppConfig appconfig;

    ...
}

または、Aaron Digullaが述べたように:

public class WebConfig {
    @Autowired
    Validator validator;

    ...
}

私は最初の形式を好みます。1つの自動配線で構成全体にアクセスでき、次にを呼び出すことでそのBeanにアクセスできますtheNewBean.setValidator(appConfig.validator());

于 2012-09-13T08:28:07.940 に答える
2

AaronDigullaとAmirPashazadehはどちらも正しいと思いますが、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 に答える