@Import的参数是一个class类型的数组
@Import(Cat.class)//可以把一个类当做一个Bean注入到Spring中
@Import(CatConfiguration.class)//可以把一个配置类注入到spring中
public class Cat { public void miaomiao(){ System.out.println("miaomiao"); } }
@Configuration public class CatConfiguration { @Bean public Cat cat() { return new Cat(); } }
可以看出,@Import注解可以把一个普通的类转换成一个bean,添加到spring容器中.
也可以把一个配置类添加到spring的容器中,但是配置类本来就会被添加spring容器中啊
如果@Import()中天机的是一个实现了ImportSelector接口类,那么就会把返回的全类名的数组都添加到spring容器中.
@Import(DogSelector.class)//可以DogSelector中返回的全类名数组都加入到spring中管理
public class DogSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[]{"com.mccloud.mccloudtest.conf.Dog","xxx.xxx.xxx.xxx",...};//可以把这里返回的类都加到sprin管理起来 } }
//BeanDefinitionRegistrat注册进来
@Import(DuckBeanDefinitionRegistrat.class)//可以把一个BeanDefinitionRegistrat注册进来
public class DuckBeanDefinitionRegistrat implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { BeanDefinition beanDefinition = new RootBeanDefinition(Duck.class); registry.registerBeanDefinition("Duck", beanDefinition); } }
public class Duck { public void gaga(){ System.out.println("gaga"); } }