7.12.5 Composing Java-based configurations
使用@Import 注解
与Spring XML文件的<import/>很像,@Import注解允许你加载别的配置类
@Configuration
public class ConfigA{
@Bean
public A a(){
return new A();
}
}
@Configuration
@Import(ConfigA.class)
public class ConfigB{
@Bean
public B b(){
return new B();
}
}
现在,你不用指定ConfigA.class 和 ConfigB.class当初始化上下文时,仅需要显示的提供ConfigB就可以了
public static void main(String[] args){
Application ctx = new AnnotationConfigApplicationContext(ConfigB.class);
A a = ctx.getBean(A.class);
B b = ctx.getBean(B.class);
}
开发者仅需要处理一个类,而不需要开发者记住大量的@Configuration类
Spring4.2 @Import也支持
Injecting dependencies on imported @Bean definitions
@Configuration
public class ServiceConfig{
@Bean
public TransferService tranferService(AccountRepository accountRepository){
return new TransferServiceImpl(accountRepository);
}
}
@Configuration
public class RepositoryConfig{
@Bean
public AccountRepository accountRepository(DataSource dataSource){
return new JdbcAccountRepository(dataSource);
}
}
@Configruation
@Import({ServiceConfig.class, RepositoryConfig.class})
public class SystemTestConfig{
@Bean
public DataSource dataSource(){
//return new DataSource
}
public static void main(String[] args){
Application ctx = new AnnotationConfigApplicatoinContext(SystemTestConfig.class);
TransferService transferService = ctx.getBean(TransferService.class);
}
}
在配置类中也可以使用@Autowired和@Value
@Configuration
public class ServiceConfig{
@Autowired
private AccountRepository accountRepository;
@Bean
public TransferService transferService(){
return new TransferServiceImpl(accountRepository);
}
}
@Configuration
public class RepositoryConfig{
private final DataSource dataSource;
@Autowired
public RepositoryConfig(DataSource dataSource){
this.dataSource = dataSource;
}
@Bean
public AccountRepository accountRepository(){
return new JdbcAccountRepository(dataSource);
}
}
@Configuration
@Import({ServiceConfig.class, RepositoryConfig.class})
public class SystemTesstConfig{
@Bean
public DataSource dataSource(){
//return new DataSource
}
}
public static void main(String[] args){
ApplicationContext ctx = new AnnotationConfigApplicatonContext(SystemTestConfig.class);
ctx.getBean(TransferService.class);
}
未完