springboot源码-@Import注解作用

springboot源码-@Import注解作用

参考网址:

https://mp.weixin.qq.com/s/xnELQmEiKsamoQ_EZ1cZRw

作用

  1. 导入普通类 , 搭配 @Configuration 注解使用
  2. ImportSelector 接口搭配使用
  3. ImportBeanDefinitonRegistrar 搭配使用

1.导入普通类

MyImportBean.java

public class MyImportBean {
    public void hello(){
        System.out.println("测试 import 导入 普通类");
    }
}

MyImportConfiguration.java

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
// 参数值是个数组 , 可以存放多个 javabean 到 spring 容器中 
@Import({MyImportBean.class})
public class MyImportConfiguration {
}

启动类测试

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(SpringbootDemoApplication.class, args);
        // 从 springboot 容器中 获取 MyImportBean.class 对象
        MyImportBean myImportBean = ac.getBean(MyImportBean.class);
        myImportBean.hello();
        
    }

}

2.ImportSelector

MyImportSelectorBeanOne.java

public class MyImportSelectorBeanOne {
    public void hello(){
        System.out.println("MyImportSelectorBeanOne ---> hello 方法");
    }
}

MyImportSelectorBeanTwo.java

public class MyImportSelectorBeanTwo {
    public void hello(){
        System.out.println("MyImportSelectorBeanTwo ---> hello 方法");
    }
}

MyImportSelector.java

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        
        return new String[]{"com.example.controller.importtest.MyImportSelectorBeanOne","com.example.controller.importtest.MyImportSelectorBeanTwo"};
    }
}

MyImportSelectorConfiuration.java

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

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

启动类测试

import com.example.controller.importtest.MyImportSelectorBeanOne;
import com.example.controller.importtest.MyImportSelectorBeanTwo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(SpringbootDemoApplication.class, args);
        MyImportSelectorBeanOne myImportSelectorBeanOne = ac.getBean(MyImportSelectorBeanOne.class);
        MyImportSelectorBeanTwo myImportSelectorBeanTwo = ac.getBean(MyImportSelectorBeanTwo.class);
        myImportSelectorBeanOne.hello();
        myImportSelectorBeanTwo.hello();
    }

}

3.ImportBeanDefinitonRegistrar

MyImportBeanDefinitionRegistrarOne.java

public class MyImportBeanDefinitionRegistrarOne {
    public void hello(){
        System.out.println("MyImportBeanDefinitionRegistrarOne ---> hello");
    }
}

MyImportBeanDefinitionRegistrarTwo.java

public class MyImportBeanDefinitionRegistrarTwo {
    public void hello(){
        System.out.println("MyImportBeanDefinitionRegistrarTwo ---> hello");
    }
}

MyImportBeanDefinitionRegistrar.java

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        RootBeanDefinition rootBeanDefinition1 = new RootBeanDefinition();
        RootBeanDefinition rootBeanDefinition2 = new RootBeanDefinition();
        rootBeanDefinition1.setBeanClass(MyImportBeanDefinitionRegistrarOne.class);
        rootBeanDefinition2.setBeanClass(MyImportBeanDefinitionRegistrarTwo.class);
        registry.registerBeanDefinition("one",rootBeanDefinition1);
        registry.registerBeanDefinition("two",rootBeanDefinition2);
    }
}

MyImportBeanDefinitionRegistrarConfiuration.java

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

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

启动类测试

import com.example.controller.importtest.MyImportBeanDefinitionRegistrarOne;
import com.example.controller.importtest.MyImportBeanDefinitionRegistrarTwo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(SpringbootDemoApplication.class, args);
        MyImportBeanDefinitionRegistrarOne myImportBeanDefinitionRegistrarOne = (MyImportBeanDefinitionRegistrarOne) ac.getBean("one");
        MyImportBeanDefinitionRegistrarTwo myImportBeanDefinitionRegistrarTwo = (MyImportBeanDefinitionRegistrarTwo) ac.getBean("two");
        myImportBeanDefinitionRegistrarOne.hello();
        myImportBeanDefinitionRegistrarTwo.hello();
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值