spring @Import四种实践
2019-05-18 本文已影响0人
不存在的里皮
-
Spring JavaConfig使用@Configuration可以配置Bean
-
Spring框架中的@Import注解
@Import的两种用法:导入Bean、导入Configuration -
Spring中@Import注解的作用和使用
@Import有四种用法:- 声明一个bean
- 导入@Configuration注解的配置类
- 通过ImportSelector的实现类间接导入
- 通过ImportBeanDefinitionRegistrar的实现类间接导入
-
Spring - @Configuration selection by using ImportSelector
@Import加入ImportSelector时,用在@interface上,则使该注解能选择性导入Configuration。 -
深入理解Spring的ImportSelector接口使用@Import、ImportSelector实现@EnableXX注解
1. 导入Configuration
Spring框架中的@Import注解向我们展示了@Import的两种用法:
- 通过在@Configuration类上使用@Import导入其它的@Configuration,来将多个配置导入到一个主配置中,避免将所有配置写在一个配置中。
@Configuration @Import({JavaConfigA.class,JavaConfigB.class}) public class ParentConfig { //Any other bean definitions }
此处,ParentConfig是主配置,JavaConfigA和JavaConfigB都是@Configuration类,各自用@Bean方法定义了自己的Bean。
2. 导入普通java类
在4.2以后,也可以导入普通的java类,并将其声明成一个bean
// 一个普通java类
public class DemoService {
public void doSomething(){
System.out.println("ok");
}
}
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
// Configuration将导入DemoService
@Configuration
@Import(DemoService.class) //在spring 4.2之前是不不支持的
public class DemoConfig {
}
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com..example");
DemoService ds = context.getBean(DemoService.class);
ds.doSomething();
}
}
输出结果:ok
3. 导入ImportSelector的实现类
4. 导入ImportBeanDefinitionRegistrar的实现类
@Import用于@interface
阅读Spring - @Configuration selection by using ImportSelector中的Using Annotation based ImportSelector部分