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


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

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

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

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

  • 相关阅读:
    Perl的LWP::UserAgent库爬虫程序怎么写
    [STM32学习]定时器实现码表(数码管显示)
    【图像处理】VS编译opencv源码,并调用编译生成的库
    python接口自动化测试(六)-unittest-单个用例管理
    Quartz.Net详解
    力扣刷题学习SQL篇——1-2 选择(寻找用户推荐人———空字段处理isnull和<>)
    计算机网络-应用层详解(持续更新中)
    固定资产模块事务代码
    ssm springboot关于java mysql关于查询或者添加中文乱码问题
    STL(标准模板库)入门
  • 原文地址:https://blog.csdn.net/weixin_64939936/article/details/133524359