@import注解用法

@Import通过快速导入的方式实现把实例加入spring的IOC容器中
@Import注解的作用和在使用spring的xml配置时用到的类似。但应注意是@Import在使用时,
必须要保证能被IOC容器扫描到,所以通常它会和@Configuration或者@ComponentScan配套使用。
@Import在使用时可以声明在JAVA类上,或者作为元注解使用(即声明在其他注解上)

@Import注解有三种用法

直接导入@Configuration配置类
public class Dog {
    public void run() {
        System.out.println("Dog run");
    }
}

@Import(Dog.class)
@Configuration
public class AppConfig {
}
// 测试类
public class annoTest {
    private static AnnotationConfigApplicationContext classPath;
    @Test
    public void testConsutrator(){
        classPath = new AnnotationConfigApplicationContext(AppConfig.class);
        Dog exampleBean = classPath.getBean(Dog.class);
        System.out.println(exampleBean);
    }
}

在这里插入图片描述

导入实现了ImportSelector的类

返回值: 就是我们实际上要导入到容器中的组件全类名
参数: AnnotationMetadata表示当前被@Import的类上的所有注解信息

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        Set<String> annotationTypes = annotationMetadata.getAnnotationTypes();
        for (String str:annotationTypes) {
            System.out.println(str);
        }
        return new String[]{"com.picc.spring.annotation.Dog"};
    }
}

@Import({MyImportSelector.class})
@Configuration
public class AppConfig {
}

public class annoTest {
    private static AnnotationConfigApplicationContext classPath;
    @Test
    public void testConsutrator(){
        classPath = new AnnotationConfigApplicationContext(AppConfig.class);
        Dog exampleBean = classPath.getBean(Dog.class);
        System.out.println(exampleBean);
    }
}

在这里插入图片描述

导入实现了ImportBeanDefinitionRegistrar的类
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        Set<String> annotationTypes = annotationMetadata.getAnnotationTypes();
        for (String str:annotationTypes) {
            System.out.println(str);
        }
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Dog.class);
        beanDefinitionRegistry.registerBeanDefinition("dog",rootBeanDefinition);
    }
}

@Import({MyImportBeanDefinitionRegistrar.class})
@Configuration
public class AppConfig {
}

在这里插入图片描述

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Import注解是Spring中的注解之一,用于导入其他的配置类或者普通的类,从而使它们成为当前配置类中的一个Bean。可以用在@Configuration注解的类中,或者用在普通的类中作为一个注解。 使用方法: 1. 导入配置类:可以将一个或多个@Configuration注解的配置类导入到当前配置类中,以便使用其中的Bean。示例代码如下: ```java @Configuration @Import({Config1.class, Config2.class}) public class AppConfig { // ... } ``` 2. 导入普通类:可以将一个或多个非@Configuration注解的普通类导入到当前配置类中,以便使用其中的Bean。示例代码如下: ```java @Configuration @Import({Service1.class, Service2.class}) public class AppConfig { // ... } ``` 3. 导入ImportSelector实现类:可以将一个实现了ImportSelector接口的类导入到当前配置类中,该类可以动态地选择要导入的类。示例代码如下: ```java @Configuration @Import(MyImportSelector.class) public class AppConfig { // ... } ``` 4. 导入ImportBeanDefinitionRegistrar实现类:可以将一个实现了ImportBeanDefinitionRegistrar接口的类导入到当前配置类中,该类可以动态地注册Bean定义。示例代码如下: ```java @Configuration @Import(MyImportBeanDefinitionRegistrar.class) public class AppConfig { // ... } ``` 5. 导入FactoryBean:可以将一个实现了FactoryBean接口的类导入到当前配置类中,以便使用其中的Bean。示例代码如下: ```java @Configuration @Import(MyFactoryBean.class) public class AppConfig { // ... } ``` 需要注意的是,@Import注解只是将其他的类导入到当前配置类中,而并不会自动将其实例化为Bean。如果需要使用导入的类中的Bean,需要在当前配置类中通过@Bean注解手动创建相应的Bean。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值