Import注解

@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");
    }
}

 

posted @ 2019-11-04 15:44  宋发准  阅读(428)  评论(0编辑  收藏  举报