根据 官方文件:
注释类型配置
表示一个类声明了一个或多个@Bean 方法,并且可以由 Spring 容器处理以生成 bean 定义…
@Configuration 类可以使用 @Import 注释组合,与 Spring XML 中的工作方式不同。因为 @Configuration 对象在容器中作为 Spring bean 进行管理。
但是我也可以在没有@Import 的情况下使用@Configuration 注释。我已经测试了下面列出的代码,它按预期工作。那么使用@Import 的目的是什么?
DispatcherServletInitializer
public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
WebMvcConfigurer适配器
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "package.name" })
// @Import(OptionalConfig.class)
public class WebConfig extends WebMvcConfigurerAdapter {
// ...
}
可选配置
@Configuration
public class OptionalConfig {
@Bean(name = "myClass")
public MyClass myClass() {
return new MyClass();
}
}
服务
@Service
public class MyServiceImpl implements MyService {
@Autowired
private MyClass myClass; // yes, it works
// ...
}
原文由 enzo 发布,翻译遵循 CC BY-SA 4.0 许可协议
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html