# SpringBootTest2 **Repository Path**: GooGa/spring-boot-test2 ## Basic Information - **Project Name**: SpringBootTest2 - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

东莞理工学院网络空间安全学院


课程名称:企业级开发框架 学期:2020春季 | 实验名称: | 利用SB的自动装配特性实现动态注册组件 | 实验序号: | 二 | 指导老师: | 黎志雄 | |---|---|---|---|---|---| | 姓名: | 伍冠佳 | 学号: | 201841413132 | 班级: | 18网工1班 | | 实验地址: | 线上 | 实验日期: | 2020-10-22 | 实验成绩: | XXX | # 实验二 利用SB的自动装配特性实现动态注册组件 #### 一、实验目的 1. 掌握Spring Boot的自动配置原理; 2. 掌握Spring框架动态注册Bean的原理; 3. 掌握自动生成元数据文件。 4. 掌握spring框架的事件模型。 #### 二、实验环境 1. JDK 1.8或更高版本 2. Maven 3.6+ 3. IntelliJ IDEA #### 三、实验任务 1. 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目。
2. 创建一个自定义的CommandLineRunner接口的实现类。
![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/210746_d1cedbe6_8068544.png "屏幕截图.png")
3. 创建一个自定义的自动配置类。
![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/210951_d3ca80dc_8068544.png "屏幕截图.png")
4. 创建spring.factories文件。
![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/211050_77686f85_8068544.png "屏幕截图.png")
测试运行程序:
![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/214846_15aad287_8068544.png "屏幕截图.png")
5. 给自动配置类添加有效条件。
a. 利用 @ConditionalOnProperty 注解,添加属性条件。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/215449_948aeb85_8068544.png "屏幕截图.png") b. 在application.properties属性文件中添加一个自定义的属性。
c. 切换属性值false/true,观察终端的显示,判断自动装配的配置类是否生效。
6. 自定义的一个Bean,绑定属性值,并生成spring配置类的元数据文件。
a. 创建一个类,并在类上加@ConfigurationProperties注解,设置注解的prefix属性指定绑定的属性的前缀。
b. 在某个配置类上添加@EnableConfigurationProperties,并指定装配的属性Bean。
c. 使用spring boot框架提供的注解处理器生成自定义属性的元数据文件。
说明:
Spring Boot应程序打包后的jar文件中包含元数据文件,这些文件提供了所有受支持的配置属性的详细信息。这些文件旨在让IDE开发人员在编辑application.properties或 application.yml文件时提供上下文帮助和“代码完成” 。Interllj IDEA默认支持。 元数据文件位于META-INF目录下,名字spring-configuration-metadata.json。 元数据文件可以自己写,或使用spring boot官方提供的依赖包自动生成。 在pom.xml文件中引入spring-boot-configuration-processor依赖。这个依赖包里有spring boot提供的注解处理器,在项目编译时检查项目内所有@ConfigurationProperties 的类,并生成元数据文件。
a. 在pom.xml文件中引入spring-boot-configuration-processor依赖: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/220712_6cbbd18e_8068544.png "屏幕截图.png") b. 编译打包项目。观察target目录下的元数据文件: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/220801_67cebe67_8068544.png "屏幕截图.png") c. 现在我们再回去编辑属性文件时,只要输入属性的部分关键字,idea会自动提示,如下图: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/220859_15ca4cf0_8068544.png "屏幕截图.png") 7. 根据阅读框架源码,我们可以自定义一个事件发布器,并设置线程池,实现异步发布事件。
a. 自定义的事件发布器。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/225543_8bf11fb8_8068544.png "屏幕截图.png") b. 自定义事件类。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/225636_c2522cfa_8068544.png "屏幕截图.png") c. 自定义事件监听器。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/225704_01aef590_8068544.png "屏幕截图.png") d. 编写一个测试用例,检查发布事件时,是否使用了多线程异步处理。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/225735_03b1a0b6_8068544.png "屏幕截图.png") e. 测试结果: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/230323_2969ff3e_8068544.png "屏幕截图.png") 8. 自定义 ApplicationReadyEvent 的事件监听器 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/225945_c5a81fc1_8068544.png "屏幕截图.png") 测试结果: ![输入图片说明](https://images.gitee.com/uploads/images/2020/1101/230341_9dd2984c_8068544.png "屏幕截图.png")