Spring @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 {
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">registerBeanDefinitions</span><span class="hljs-params">(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)</span> </span>{
    BeanDefinition beanDefinition = <span class="hljs-keyword">new</span> RootBeanDefinition(Person.class);
    registry.registerBeanDefinition(<span class="hljs-string">"PERSON"</span>, beanDefinition);
}

}

配置类

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

}

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


PERSON 成功注册
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值