Spring Boot 自动装配原理源码分析(一) Spring的@Import注解说明

视频地址:  https://www.bilibili.com/video/BV1yr4y1w7ia

代码仓库:    https://gitee.com/crazyliyang/video-teaching

 

直接上代码说明:  建立项目   spring-import-selector

1001-import.png

 

核心    MyEnableAutoImportBeans

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.TYPE)
@Import(value = {
        Dog.class,  // 直接 import 一个普通类, 也可以被注册到 IOC 容器中
        MyImportSelector.class  // 根据  ImportSelector 接口的 selectImports()方法 返回值 String[]
})
public @interface MyEnableAutoImportBeans {

    String value() default "test-liy";

    String name() default "";

    int id() default 0;
}

 

核心 MyImportSelector

/**
 *   实现 ImportSelector 接口, 实现 selectImports() 方法返回 String[]  为类的全路径类名的数组
 *   @Import( value = { MyImportSelector.class } )  在@Import中使用 返回的类都将会实例化到 Spring IOC容器
 **/
public class MyImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {


        // 遍历最终该 MyImportSelector 作用的类上所有标注的注解:  最终是作用在了AppConfig上了
        importingClassMetadata.getAnnotationTypes().forEach( t -> {
            System.out.println( " AnnotationTypes  <> "  + t );
        });


        // 拿到 @MyEnableAutoImportBeans 注解的所有 属性值
        Map<String, Object> annotationAttributes = importingClassMetadata.getAnnotationAttributes(MyEnableAutoImportBeans.class.getName());


        annotationAttributes.forEach( (k,v) -> {
            System.out.println(  " @MyEnableAutoImportBeans 注解中属性:  "  + k  + "  =  "  + v );
        });


        /**
         * 核心 返回值 String[]  都将会被实例化, 注册到 Spring 容器 ( 默认是,单例的)
         */
        return new String[]{
                Student.class.getName(),
                "com.liy.jiagou.components.Tree"
        };
    }

}

代码仓库:    https://gitee.com/crazyliyang/video-teaching

 

总结:  

 

@Import( value = { ImportSelector.class } )  

在@Import中的  ImportSelector#selectImports()  返回的全限定类名数组.String[ ]  中所有的类,  都将会被实例化并且注册到 Spring IOC容器中

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值