# JavaEE3-Experiment2 **Repository Path**: shallowcmz/JavaEE3-Experiment2 ## Basic Information - **Project Name**: JavaEE3-Experiment2 - **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-04-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

实验二

课程名称:企业级开发框架专题

学期:2020春季

实验名称利用Spring boot的自动装配特性实现动态注册组件实验序号
姓 名陈铭昭学 号201741404152班 级17软卓1班
实验地点网上实验日期2020/4/12指导老师黎志雄
教师评语***实验成绩 评阅教师
百分制**
同组同学
# 实验目标 1、 掌握Spring Boot的自动配置原理; 2、 掌握Spring框架动态注册Bean的原理; 3、 掌握自动生成元数据文件。 4、 掌握spring框架的事件模型。 # 实验内容(实验步骤) 1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目 注意:创建项目时,请选择添加Spring Configuration Processor依赖 2、 创建一个自定义的CommandLineRunner接口的实现类 注意:不要在自定义类上加@Component注解 3、 创建一个自定义的自动配置类 4、 创建spring.factories文件 5、 给自动配置类添加有效条件 步骤如下: 1) 利用@ConditionalOnProperty注解,添加属性条件 2) 在application.properties属性文件中添加一个自定义的属性 3) 切换属性值false/true,观察终端的显示,判断自动装配的配置类是否生效 6、 自定义的一个Bean,绑定属性值,并生成spring配置类的元数据文件 步骤如下: 1) 创建一个类,并在类上加@ConfigurationProperties注解,设置注解的prefix属性指定绑定的属性的前缀 2) 在某个配置类上添加@EnableConfigurationProperties,并指定装配的属性Bean 3) 使用spring boot框架提供的注解处理器生成自定义属性的元数据文件 7、 根据阅读框架源码,我们可以自定义一个事件发布器,并设置线程池,实现异步发布事件 8、 自定义事件类 9、 自定义事件监听器 10、 编写一个测试用例,检查发布事件时,是否使用了多线程异步处理 深入思考: 在上面的例子中,我们使用了Spring Boot框架提供的默认线程池。默认线程池在自动配置类TaskExecutionAutoConfiguration中定义。 我们可以自定义一个自己的线程池,这样可以配置更多的属性。尝试一下自定义一个线程池,然后给自定义的事件发布器使用。 # 实验要求 1、 实验项目push到码云的公开仓库,并把仓库网址登记在在线文档; 2、 从码云仓库下载项目的ZIP文件,并交由班长汇总; 3、 撰写实验报告,完成各个实验任务。各实验任务中的附图,是老师的演示代码,同学们应该模仿演示代码改为自己的代码。实验报告中必须完整描述各实验任务实现过程并附截图。 4、 网络空间安全学院实验报告模板(2019试行) 5、 实验二项目仓库登记表 6、 严禁抄袭。如果不想项目仓库给别人看到,可以设置为私有仓库,并把老师的码云账号(dgsai@vip.qq.com)加入到仓库开发者以便老师检查。 # 实验结果(及分析): 1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目
![avatar](./image/1.png)
2、 创建一个自定义的CommandLineRunner接口的实现类
![avatar](./image/2.png)
3、 创建一个自定义的自动配置类
![avatar](./image/3.png)
4、 创建spring.factories文件
![avatar](./image/4.png)
5、 给自动配置类添加有效条件
![avatar](./image/16.png)
当条件为true时,结果如下:
![avatar](./image/6.png)
当条件为false时,结果如下:
![avatar](./image/7.png)
6、 自定义的一个Bean,绑定属性值,并生成spring配置类的元数据文件
命令行输入mvn package, 可以看到target中多了元数据的文件
![avatar](./image/9.png)
然后到application.properties中,可以看到已经有提示
![avatar](./image/10.png)
7、 根据阅读框架源码,我们可以自定义一个事件发布器,并设置线程池,实现异步发布事件
![avatar](./image/14.png)
运行后:
![avatar](./image/15.png)
8、 自定义事件类
![avatar](./image/10.png)
9、 自定义事件监听器
![avatar](./image/11.png)
10、 编写一个测试用例,检查发布事件时,是否使用了多线程异步处理
![avatar](./image/12.png)
运行后:
![avatar](./image/13.png)