• Spring 注解之 @Import


    @Import注解是用于给Spring容器导入组件,其主要的使用方式有下列三种

    一、@Import

      1、@Import注解的详细信息如下:

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Import {
      // @Import注解的取值是一个Class类型的数组,可以同时填写多个类的字节码文件 
        Class<?>[] value();
    }
    

      2、@Import注解的使用位置

    public enum ElementType {
        // 使用在类上、接口上(包括注解类型)、或者是枚举声明上
        /** Class, interface (including annotation type), or enum declaration */
        TYPE,
    

      3、@Import注解语法格式

        @Import({类1.class,类2.class,类3.class......}) 

      4、测试@Import注解

        一、准备几个测试类,PineApple,Plum、WaterMelon

        二、Spring的配置类

    @Configuration
    // 使用@Import将下面三个组件导入到Spring中,交由Spring容器进行管理
    @Import({PineApple.class,Plum.class,WaterMelon.class})
    public class SpringConfiguration {
    }

        三、测试类

    public class SpringDemo {
        
        @Test
        public void springTest01() {
            ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
            // 获取并输出所有Bean的名称
            String[] beanDefinitionNames2 = context.getBeanDefinitionNames();
            for (String beanDefinitionName : beanDefinitionNames2) {
                System.out.println(beanDefinitionName);
            }
        }
    }

        四、测试结果

    // Spring容器自身组件
    org.springframework.context.annotation.internalConfigurationAnnotationProcessor
    org.springframework.context.annotation.internalAutowiredAnnotationProcessor
    org.springframework.context.annotation.internalCommonAnnotationProcessor
    org.springframework.context.event.internalEventListenerProcessor
    org.springframework.context.event.internalEventListenerFactory
    // Spring配置类
    springConfiguration
    // 自定义组件
    com.spring01.bean.PineApple
    com.spring01.bean.Plum
    com.spring01.bean.WaterMelon
    

      

    二、实现ImportSelector接口&&@Import注解

      1、自定义类(MyImportSelector)实现ImportSelector接口

    public class MyImportSelector implements ImportSelector {
        @Override
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            // 定义一个字符串数组,里面定义你要注入到Spring容器中的类,(包类路径)
            String[] strArr = {"com.spring01.bean.WaterMelon","com.spring01.bean.PineApple"};
    
            return strArr;
        }
    }

      2、配置类

    @Configuration
    // 导入自定义类MyImportSelector
    @Import(MyImportSelector.class)
    public class SpringConfiguration {
    }

      3、测试类

    public class SpringDemo {
    
        @Test
        public void springTest01() {
            ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
            // 获取并输出所有Bean的名称
            String[] beanDefinitionNames2 = context.getBeanDefinitionNames();
            for (String beanDefinitionName : beanDefinitionNames2) {
                System.out.println(beanDefinitionName);
            }
        }
    }

      4、测试结果

    // Spring容器自身组件
    org.springframework.context.annotation.internalConfigurationAnnotationProcessor
    org.springframework.context.annotation.internalAutowiredAnnotationProcessor
    org.springframework.context.annotation.internalCommonAnnotationProcessor
    org.springframework.context.event.internalEventListenerProcessor
    org.springframework.context.event.internalEventListenerFactory
    // Spring配置类
    springConfiguration
    // 自定义要导入的组件
    com.spring01.bean.WaterMelon
    com.spring01.bean.PineApple
    

      

    三、实现ImportBeanDefinitonRegistrar接口&&@Import注解

      1、自定义类MyImportBeanDefinitionRegistrar实现ImportBeanDefinitionRegistrar接口,并且手动实现registerBeanDefinitions方法

    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
         // 指定Bean的信息 RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Plum.class);
    // 注册bean时指定bean对应的id registry.registerBeanDefinition("plum",rootBeanDefinition); } }

      2、配置类

    @Configuration
    @Import({MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
    public class SpringConfiguration {
    }
    

      3、测试类

    @Test
    public void springTest01() {
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        // 获取并输出所有Bean的名称
        String[] beanDefinitionNames2 = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames2) {
        System.out.println(beanDefinitionName); } }

      4、测试结果

    // Spring容器自身组件
    org.springframework.context.annotation.internalConfigurationAnnotationProcessor
    org.springframework.context.annotation.internalAutowiredAnnotationProcessor
    org.springframework.context.annotation.internalCommonAnnotationProcessor
    org.springframework.context.event.internalEventListenerProcessor
    org.springframework.context.event.internalEventListenerFactory
    // Spring配置类
    springConfiguration
    // 使用实现ImportSelector接口和@Import注解实现注入组件
    com.spring01.bean.PineApple
    com.spring01.bean.WaterMelon
    // 使用实现ImportBeanDefinitionRegistrar接口和@Import注解实现注入组件
    plum
    

      

  • 相关阅读:
    鹰牌陶瓷签约亿客CRM系统 建材行业进入CRM时代
    CRM成为大数据落地的关键
    客户流失了怎么办?
    亿客CRM研发公司简介
    CRM销售管理软件让销售管理成为企业的助力
    CRM帮助企业的营销管理
    浅析移动CRM的客户价值细分
    CRM规划和执行战略
    信息化的先锋CRM
    SaaS的应用将弱化大小企业间竞争差距
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/13553529.html
Copyright © 2020-2023  润新知