spring版本为5.0.11
- 声明一个bean
- 导入@Configuration注解的配置类
- 导入ImportSelector的实现类
- 导入ImportBeanDefinitionRegistrar的实现类
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Import { /** * {@link Configuration @Configuration}, {@link ImportSelector}, * {@link ImportBeanDefinitionRegistrar}, or regular component classes to import. */ Class<?>[] value(); }
@Import注解的使用
1.声明一个bean
@Import({Bean1.class,TestConfiguration.class,TestImportBeanDefinitionRegistrar.class,TestImportSelector.class}) @Configuration public class ImportConfiguration { }
2.导入@Configuration注解的配置类
@Configuration public class TestConfiguration { @Bean public User user(){ return new User(); } }
@Import({Bean1.class,TestConfiguration.class,TestImportBeanDefinitionRegistrar.class,TestImportSelector.class}) @Configuration public class ImportConfiguration { }
3.导入ImportSelector的实现类
public class TestImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { return new String[]{"com.mufeng.bean.bean2"}; } }
4.导入ImportBeanDefinitionRegistrar的实现类
public class TestImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { RootBeanDefinition rootBeanDefinition=new RootBeanDefinition(Bean3.class); beanDefinitionRegistry.registerBeanDefinition("Bean3",rootBeanDefinition); } }
@Import({Bean1.class,TestConfiguration.class,TestImportBeanDefinitionRegistrar.class,TestImportSelector.class}) @Configuration public class ImportConfiguration { }
测试结果
@RunWith(SpringRunner.class) @SpringBootTest(classes = StartBootTestApplication.class) public class TestImport { @Test public void test1(){ AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(ImportConfiguration.class); String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); System.out.println("---------------------------------"); for(String beanDefinition:beanDefinitionNames){ System.out.println(beanDefinition); } System.out.println("------------------------------------"); } }
Bean1 instanced Bean2 instanced Bean3 instanced --------------------------------- org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalRequiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory importConfiguration com.mufeng.bean.Bean1 com.mufeng.config.TestConfiguration user com.mufeng.bean.Bean2 Bean3 ------------------------------------
Bean1、Bean2、Bean3、User导入到spring容器中