你可以在spring boot中定义多个@configuration
Matias Elorriaga 提到。
@Configuration 等于 spring xml 中的<beans> 标记,其中包含许多<bean>(等于@Bean),与注释@Configuration 相同的类说嘿你可以在我里面定义多个bean
e.f:
@Configuration
public class AppConfig {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("message");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public Validator validator() {
final LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource());
return localValidatorFactoryBean;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.ENGLISH);
return sessionLocaleResolver;
}
}
另外,如果您有 2 个不同的类具有相同类型的 Bean
例如class: SpringConfigA 有 Composite bean
@Configuration
public class SpringConfigA {
@Bean
public Composite composite() {
Composite c = new Composite();
return c;
}
}
和另一个类 SpringConfigB 有相同的 Composite bean
@Configuration
public class SpringConfigB {
@Bean
public Composite composite() {
Composite c = new Composite();
return c;
}
}
然后它会在 bean 初始化期间抛出异常,因为复合 bean 有歧义,所以
在这里你可以使用限定符来解决这个问题
所以
@Configuration
public class SpringConfigA {
@Bean
@Qualifier("compositeA")
public Composite composite() {
Composite c = new Composite();
return c;
}
}
另一个类 SpringConfigB 具有相同的 Composite bean,限定符名称为“compositeB”
@Configuration
public class SpringConfigB {
@Bean
@Qualifier("compositeB")
public Composite composite() {
Composite c = new Composite();
return c;
}
}