1.三种方式
@Import
@Import + 实现ImportSelector接口的类
@Import + 实现ImportBeanDefinitionRegistrar接口的类
2.demo1 TestImportBean1
@Component
@Import(value = {TestImportBean1.class,TestImportBeanDefinitionRegistrar.class, TestImportSelect.class })
public class ImportTest {
}
public class TestImportBean1 {
}
public class ApplicationContextTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
for (String beanDefinitionName : annotationConfigApplicationContext.getBeanDefinitionNames()) {
System.out.println(beanDefinitionName);
}
/**
* org.springframework.context.annotation.internalConfigurationAnnotationProcessor
* org.springframework.context.annotation.internalAutowiredAnnotationProcessor
* org.springframework.context.annotation.internalCommonAnnotationProcessor
* org.springframework.context.event.internalEventListenerProcessor
* org.springframework.context.event.internalEventListenerFactory
* mainConfig
* importTest
*/
}
}
@Configuration
@ComponentScan(basePackages = {"com.zhenzhen.demo.spring"})
public class MainConfig {
}
3.demo2 DeferredImportSelector
@Component
@Import(value = {TestImportBean1.class,TestImportBeanDefinitionRegistrar.class, TestImportSelect.class })
public class ImportTest {
}
public class TestImportSelect implements DeferredImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
//注意不能返回null,可以返回一个空数组
return new String[]{"com.zhenzhen.demo.spring.bean.TestImportSelectBean1",
"com.zhenzhen.demo.spring.bean.TestImportSelectBean2"};
//return new String[0];
}
}
public class TestImportSelectBean1 {
}
public class TestImportSelectBean2 {
}
public class ApplicationContextTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
for (String beanDefinitionName : annotationConfigApplicationContext.getBeanDefinitionNames()) {
System.out.println(beanDefinitionName);
}
/**
* org.springframework.context.annotation.internalConfigurationAnnotationProcessor
* org.springframework.context.annotation.internalAutowiredAnnotationProcessor
* org.springframework.context.annotation.internalCommonAnnotationProcessor
* org.springframework.context.event.internalEventListenerProcessor
* org.springframework.context.event.internalEventListenerFactory
* mainConfig
* importTest
* com.zhenzhen.demo.spring.bean.TestImportBean1
* com.zhenzhen.demo.spring.bean.TestImportSelectBean1
* com.zhenzhen.demo.spring.bean.TestImportSelectBean2
*/
}
}
@Configuration
@ComponentScan(basePackages = {"com.zhenzhen.demo.spring"})
public class MainConfig {
}
4.demo3 ImportBeanDefinitionRegistrar
@Component
@Import(value = {TestImportBean1.class,TestImportBeanDefinitionRegistrar.class, TestImportSelect.class })
public class ImportTest {
}
public class TestImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/**
*
* @param importingClassMetadata
* @param registry
*/
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestImportSelectBean3.class);
registry.registerBeanDefinition("testImportSelectBean3",rootBeanDefinition);
}
}
public class TestImportSelectBean3 {
}
public class ApplicationContextTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
for (String beanDefinitionName : annotationConfigApplicationContext.getBeanDefinitionNames()) {
System.out.println(beanDefinitionName);
}
/**
* org.springframework.context.annotation.internalConfigurationAnnotationProcessor
* org.springframework.context.annotation.internalAutowiredAnnotationProcessor
* org.springframework.context.annotation.internalCommonAnnotationProcessor
* org.springframework.context.event.internalEventListenerProcessor
* org.springframework.context.event.internalEventListenerFactory
* mainConfig
* importTest
* com.zhenzhen.demo.spring.bean.TestImportBean1
* testImportSelectBean3
* com.zhenzhen.demo.spring.bean.TestImportSelectBean1
* com.zhenzhen.demo.spring.bean.TestImportSelectBean2
*/
}
}
@Configuration
@ComponentScan(basePackages = {"com.zhenzhen.demo.spring"})
public class MainConfig {
}