@Import 注解

@Import 注解可以普通类导入到 IoC容器中。

想要让一个普通类接受 Spring 容器管理,有以下方法

  • 使用 @Bean 注解
  • 使用 @Controller @Service @Repository @Component 注解标注该类,然后再使用 @ComponentScan 扫描包
  • @Import 方法,即现在这种方式

Student 类

public class Student {
}

配置类

@Configuration
@Import(Student.class)
public class ImportConfig {

}

测试代码

    @Test
    public void test7() {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ImportConfig.class);
        String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
        for (String name : beanDefinitionNames) {
            System.out.println(name);
        }
    }

观察有没有 Student 产生的 bean

结果


bean成功创建

以上导入普通的 Java 并将其声明为一个 bean 功能在 4.2 之后才可以使用在 spring 4.2 以前,该注解,只能导入配置类,其功能与 <import /> 标签类似


ImportSelector

ImportSelector : 返回需要导入的组件的全类名数组

MySelector 类

public class MySelector implements ImportSelector {
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"me.sjl.bean.Person"};
    }
}

配置类

@Configuration
@Import(MySelector.class)
public class ImportConfig {

}

测试代码不变,直接看结果


Person 类被加载

ImportBeanDefinitionRegistrar

BeanDefinitionRegistrar

public class MyBeanDefinitionRegistrat implements ImportBeanDefinitionRegistrar {
    
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition beanDefinition = new RootBeanDefinition(Person.class);
        registry.registerBeanDefinition("PERSON", beanDefinition);
    }
}

配置类

@Configuration
@Import(MyBeanDefinitionRegistrat.class)
public class ImportConfig {

}

测试代码不变,直接看结果,看看是否有 PERSON 这个组件


PERSON 成功注册
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.运营课程给我带来最初的印象和思考 我在知道需要完成这么一次学习实践,开始的我还是比较逃避的,通过三节课的课程学...
    时光听得见阅读 285评论 0 0
  • 三.9 杨睿曦 星期六我写完作业,在姥姥家的菜园里捉到了一只小螳螂,我立刻找了一个瓶子,把它装进瓶子养了...
    芳菲依旧赵丽芳阅读 348评论 0 0

友情链接更多精彩内容