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();
          }
      
      }
      
  • 相关阅读:
    ng机器学习视频笔记(八) ——机器学习系统调试(cv、查准率与召回率等)
    ng机器学习视频笔记(七) ——神经网络的代价函数、反向传播、梯度检验、随机初始化
    post body 传输参数
    laravel队列使用
    nginx配置框架问题
    中大型网站架构之路一
    mongo笔记2
    架构4(lvs lb集群解决方案二 lvs+keepalived)
    架构3(基于LVS LB集群解决方案一:piranha)
    YII2 BUG记录
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/13716226.html
Copyright © 2011-2022 走看看