zoukankan      html  css  js  c++  java
  • 五、【注解】Spring注解@Import

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Import {
    
    	/**
    	 * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
    	 * or regular component classes to import.
    	 */
    	Class<?>[] value();
    
    }
    

    @Import注解的作用是像IOC容器中导入我们自己想要的Bean,有三种方式:

    一、普通导入

    @Configuration
    @Import({User.class})// 导入一个叫User的类,那直接使用@Service不行吗?如果User是第三方jar包的类呢?
    public class MyConfig {
    
    }
    

    二、ImportSelector

    1. ImportSelector实现类

      /**
       * @author zhangjianbing
       * time 2020/09/21
       * https://www.zhangjianbing.com
       */
      public class MyImportSelector implements ImportSelector {
      
          /**
           *
           * @param importingClassMetadata 导入类的条件信息
           */
          @Override
          public String[] selectImports(AnnotationMetadata importingClassMetadata) {
              return new String[]{"com.zhangjianbing.spring.importselector.Blue"};// 向容器中注册Blue类,一个pojo,此类省略写了
          }
      
      }
      
    2. 配置类

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

    三、ImportBeanDefinitionRegistrar

    1. ImportBeanDefinitionRegistrar实现类

      /**
       * @author zhangjianbing
       * time 2020/09/21
       * https://www.zhangjianbing.com
       */
      public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
      
          @Override
          public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
              boolean flag = registry.containsBeanDefinition("fish");
              if (flag) {// 这个地方是:如果IOC容器中包含了一个叫fish的类,那就向容器中注册一个叫rainBow的类,灵活性很强
                  BeanDefinition beanDefinition = new RootBeanDefinition(RainBow.class);
                  registry.registerBeanDefinition("rainBow", beanDefinition);
              }
          }
      }
      
    2. 配置类

      @Configuration
      @Import({MyImportBeanDefinitionRegistrar.class})
      public class MyConfig {
      
          @Bean
          public Fish fish() {
              return new Fish();
          }
      
      }
      
  • 相关阅读:
    sublime text 配置本地静态服务器方法
    js中获得当前时间是年份和月份
    如何在Intellij IDEA中拉svn分支?
    快速上手seajs模块化以及案例
    webpack 配置多页面应用的一次尝试
    【Gitlab】gitlab-CI 持续集成以及runner的配置简版
    【vue】elementUI报错:_self.$scopedSlots.default is not a function
    【webpack】webpack多版本控制方案
    vuepress博客主题—vuepress-theme-reco
    reco-fetch
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/13716226.html
Copyright © 2011-2022 走看看