# lab-02 **Repository Path**: logicsi/lab-02 ## Basic Information - **Project Name**: lab-02 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-13 - **Last Updated**: 2021-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验二 利用SpringBoot的自动装配特性实现动态注册组件 ## 一、实验目的 1. 掌握Spring Boot的自动配置原理; 2. 掌握Spring框架动态注册Bean的原理; 3. 掌握自动生成元数据文件。 4. 掌握Spring框架的事件模型。 ## 二、实验环境 1. JDK1.8或更高版本 2. Maven3.6+ 3. IntelliJ IDEA ## 三、实验任务 ### 1、通过IntelliJ IDEA的Spring Initializer向导创建Spring Boot项目 ![image-20210413092158820](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413092158820.png) ![image-20210413092234334](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413092234334.png) ### 2、创建一个自定义的CommandLineRunner接口的实现类 ![image-20210413093723933](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413093723933.png) ### 3、创建一个自定义的自动配置类 ![image-20210413093835332](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413093835332.png) ### 4、创建spring.factories文件 ![image-20210413094628758](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413094628758.png) ![image-20210413094600034](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413094600034.png) ![image-20210413094907268](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413094907268.png) ![image-20210413101047114](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413101047114.png) ### 5、给自动配置类添加有效条件 (1)利用@ConditionalOnProperty注解,添加属性条件 ![image-20210413101421810](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413101421810.png) (2)在application.properties属性文件中添加一个自定义的属性 ![image-20210413101619648](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413101619648.png) (3)切换属性值false/true,观察终端的显示,判断自动装配的配置类是否有效。 ![image-20210413101907942](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413101907942.png) ![image-20210413101949446](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413101949446.png) ![image-20210413102225763](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413102225763.png) ### 6、自定义的一个Bean,绑定属性值,并生成spring配置类的元数据文件 (1)创建一个类,并在类上加@ConfigurationProperties注解,设置注解的prefix属性指定绑定的属性的前缀。 ![image-20210413102823031](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413102823031.png) (2)在某个类上加@EnableConfigurationProperties,并指定装配的属性Bean。 ![image-20210413103023560](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413103023560.png) (3)使用SpringBoot框架提供的注解处理器生成自定义的元数据文件。 a. 在pom.xml文件中引入spring-boot-configuration-processor依赖、 ![image-20210413103727570](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413103727570.png) b. 编译打包项目。观察target目录下的元数据文件。 ![image-20210413103830311](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413103830311.png) 查看spring-configuration-metadata.json文件 ![](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413103610591.png) c. 现在再回去编辑属性文件时,只要输入属性的部分关键字,IDEA会自动提示,如下图: ![image-20210413104148083](https://gitee.com/logicsi/pic-bed/raw/master/img/image-20210413104148083.png) ### 7、根据阅读框架源码,我们可以自定义一个事件发布器,并设置线程池,实现异步发布事件。