Spring的注解开发-@Import整合第三方框架原理

Spring与MyBatis注解方式整合有个技术重点就是@Import,第三方框架与Spring整合xml方式很多是凭借自定义标签完成的,而第三方框架与Spring整合注解方式很多是靠@Import注解完成的。

@Import可以导入如下三种类:

  • 普通类
  • 实现ImportSelector接口的类
    • package com.example.Import;
      
      import org.springframework.context.annotation.ComponentScan;
      import org.springframework.context.annotation.ImportSelector;
      import org.springframework.core.type.AnnotationMetadata;
      
      import java.util.Map;
      
      public class MyImportSelector implements ImportSelector {
          @Override
          public String[] selectImports(AnnotationMetadata annotationMetadata) {
              // annotationMetadata 注解元数据,该对象内部是封装了当前使用了@Import注解的类中的其它注解的元信息
              Map<String, Object> annotationAttributes = annotationMetadata.getAnnotationAttributes(ComponentScan.class.getName());
              annotationAttributes.forEach((attrName, attrVaule) -> {
                  System.out.println(attrName + "=====" + attrVaule);
              });
              return new String[0];
          }
      }
      
  • 实现ImportBeanDefinitionRegistrar接口的类
    • package com.example.Import;
      
      import com.example.Beans.otherBeans;
      import org.springframework.beans.factory.config.BeanDefinition;
      import org.springframework.beans.factory.support.BeanDefinitionRegistry;
      import org.springframework.beans.factory.support.BeanNameGenerator;
      import org.springframework.beans.factory.support.RootBeanDefinition;
      import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
      import org.springframework.core.type.AnnotationMetadata;
      
      public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
          @Override
          public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
              // 向Spring容器中注入BeanDefinition
              BeanDefinition beanDefinition = new RootBeanDefinition();
              beanDefinition.setBeanClassName(otherBeans.class.getName());
              registry.registerBeanDefinition("otherBeans", beanDefinition);
          }
      }
      

      都是向Spring容器中注册bean对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值