根据官方文件:
注释类型配置
指示一个类声明了一个或多个@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[] { "/" };
}
}
WebMvcConfigurerAdapter
@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
// ...
}
到目前为止,我们已经看到了如何将bean定义分解为多个
@Configuration
类,以及如何跨@Configuration
边界引用这些bean 。这些情况要求将所有@Configuration
类都提供给的构造函数JavaConfigApplicationContext
,但这并不总是理想的。通常,最好使用聚合方法,其中一个@Configuration
类在逻辑上导入由另一个类定义的bean定义。该
@Import
注释就提供了这种支持,而且它是直接等同<import/>
于Spring bean的XML文件中找到的元素。
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句