专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Spring源码之 @Import

作用

先看下这个注解都有什么属性

public @interface Import {

    /**
     * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
     * or regular component classes to import.
     */
    Class<?>[] value();
}

看value属性上面的注解 value可以放两种重要的类 ImportSelector和ImportBeanDefinitionRegistrar,当然也可以放普通类,就是不继承这两种类,所以如果想了解@Import有什么作用就要了解ImportBeanDefinitionRegistrar和 ImportSelector有什么用

ImportSelector

public interface ImportSelector {
    String[] selectImports(AnnotationMetadata importingClassMetadata);
}

ImportSelector 是一个接口,一般我们都是实现这个接口的selectImports方法,这个方法有什么作用?这个方法主要是会spring执行,返回值是我们想让spring管理的bean全类名。 比如我想让spring帮我管理A对象和B对象,这个方法就会返回一个数组{com.xx.a,cong.xx.b},spring收到返回值之后就会将这两个bean进行处理,入参AnnotationMetadata有什么作用?可以让selectImports这个方法拿到注解的内容,然后进行所需要的处理,比如说需要让bena管理的是从注解中获取到

应用

典型的应用就是springboot自动装配用到的 AutoConfigurationImportSelector 这个类继承了ImportSelector,做了什么呢? 可以参考 tech.souyunku.com5efd98… 有对这个类进行解释

ImportBeanDefinitionRegistrar

public interface ImportBeanDefinitionRegistrar {
    public void registerBeanDefinitions(
            AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);
}

ImportBeanDefinitionRegistrar 同样也是一个接口,一般我们也是实现ImportBeanDefinitionRegistrar#registerBeanDefinitions。这个方法顾名思义,就是可以注册beanDefinition。同样这个方法也是spring帮我们调用的,调用的过程会传入registry,beanDefinition注册器,通过这个我们可以自己实现注册想要注册的bean

应用

在mybatis和spring整合过程中,MapperScannerRegistrar起到了关键的作用。MapperScannerRegistrar实现了ImportBeanDefinitionRegistrar#registerBeanDef 在这个方法中,对包进行扫描,然后将mapper注册到spring容器中,详情见 juejin.im/editor/draf…

总结

所以@import 顾名思义就是导入,作用其实就是这两个类的作用,一个是返回需要spirng帮忙管理的bean名称字符串,一个是直接拿注册器,直接注册自己想要注册的类

@import 更多应用

可以看到很多@Enablexxx的注解里面其实都相当于继承了@Import比如:

@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProxy {

}

一般我们用这个注解表示开启aop开关,其实就是扫描@Import 然后调用AspectJAutoProxyRegistrar#registerBeanDefinitions方法,往spring容器中 注册 AnnotationAwareAspectJAutoProxyCreator 这个后置处理器去进行aop代理的处理

文章永久链接:https://tech.souyunku.com/26701

未经允许不得转载:搜云库技术团队 » Spring源码之 @Import

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们