1、加载实体类
@Import
可以直接指定实体类,加载这个类定义到context
中。
(AnnotationConfigApplicationContext看成是一个独立的应用上下文(application context)。主要是接受带注释的类作为输入,特别是@Configuration-annotated类。)
public class TestClassA {
}
@Import({TestClassA.class})
@Configuration
public class MyConfig {
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestGoods {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MyCondi.class);
String[] beanDefinitionNames = annotationConfigApplicationContext.getBeanDefinitionNames();
for (String beanDefinitionName: beanDefinitionNames) {
System.out.println(beanDefinitionName);
}
}
}
测试结果:
2、加载配置类
@Import
可以加载配置类中的bean到context
中。
@Configuration
public class MyConfig1 {
@Bean
public TestClassA testClassA(){
return new TestClassA();
}
}
@Import({MyConfig1.class})
@Configuration
public class MyConfig {
}
运行结果:
3、导入ImportSelector的实现类
通过selectImports方法返回一个或者多个类名,把它们转换为bean放入容器中
@Import({MyImportSelector.class})
@Configuration
public class MyConfig {
}
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.example.dyc.TestClassA"};
}
}
4、导入ImportBeanDefinitionRegistrar的实现类
通过在registerBeanDefinitions方法内创建bean对象并注册对象。
@Import({MyImportBeanDefinitionRegistrar.class})
@Configuration
public class MyConfig {
}
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestClassA.class);
registry.registerBeanDefinition("TestClassA", rootBeanDefinition);
}
}
运行结果: