SpringBoot自定义start启动器图文教程(详细)
这里写目录标题
- 1.SpringBoot启动器原理
- 2.自定义starter
- 到这已经完成启动stater启动的配置了
1.SpringBoot启动器原理
我们新建一个空的spring boot项目,他都是由启动类上标注了这个注解@SpringBootApplication
我们猜想为什么他就能启动呢?我们点进@SpringBootApplication注解,可以看到
@EnableAutoConfiguration
点进AutoConfigurationImportSelector.class
总结:
发现 META-INF/spring.factories文件中,都是配置类
2.自定义starter
因此,我们仿照上天原理,自己写一个,架构如图,
场景:做个日志配置starter,只要在加了注解(@LogAnnotation())就能记录日志。
第一步,新建一个spring boot项目,取名为:spring-boot-starter-log,这是大致的项目结构图
第二步,
新建注解LogAnnotation类
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnnotation {String module() default "test";
}
第三步,新建配置类
@Configuration
@Import(LogSelector.class)
public class LogAutoConfiguration {@Beanpublic Object getObj(){System.out.println("自动生成Object对象到spring bean工厂");return new Object();}
}
第四步,新建文件,spring.factories,里面写第二步新建配置类信息
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hsq.log.LogAutoConfiguration
第五步:文件LogAop类
@Aspect
@Order(-1)
public class LogAop {@Autowired@Qualifier("getObj")private Object getObj;@Around("@annotation(la)")public Object logRecord(ProceedingJoinPoint proceedingJoinPoint, LogAnnotation la) {Long start = System.currentTimeMillis();try {Object proceed = proceedingJoinPoint.proceed();System.out.println(la.module() + "模块的" +proceedingJoinPoint.getSignature().getName() +"方法,执行的耗时时间为:" +(System.currentTimeMillis() - start) + "ms");System.out.println(getObj);} catch (Throwable e) {e.printStackTrace();}return null;}
}
第六步,新建LogSelector类
public class LogSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {return new String[]{"com.hsq.log.aop.LogAop"};}
}
到这已经完成启动stater启动的配置了
测试,新建springboot-demo项目,maven中导入web,导入spring-boot-starter-log
在controller中
@RestController
@RequestMapping("/hello")
public class MyTestController {@LogAnnotation()@RequestMapping("/test")public String getTest() throws InterruptedException {Thread.sleep(2000);return "我正在测试自定义springboot的starter的启动器";}@LogAnnotation()@RequestMapping("aa")public String getString() {return "aaa";}
}
访问url,查看控制台信息。
SpringBoot自定义start启动器图文教程(详细)相关推荐
- Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略
Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略 导读:有时候,微信满了,需要多个微信账号在电脑端同时登陆来洽谈业务,那么如何在电脑端,同时登陆多个微信账号呢?今天 ...
- android飞行模式开启wifi,手机在飞行模式下怎么使用WiFi? 飞行模式下开启WiFi的方法图文教程详细介绍[多图]...
类型: 大小: 评分: 平台: 标签: 手机在飞行模式下怎么使用WiFi?相信很多朋友都还不太清楚吧?没关系,下面是友情小编搜集相关资料整理出来的手机在飞行模式下开启WiFi的方法图文教程详细介绍,希 ...
- @configurationproperties注解的使用_徒手使用SpringBoot自定义Starter启动器
前言 在使用SpringBoot框架时,SpringBoot 最强大的功能就是把我们常用的场景抽取封装成了一个个starter,将其称之为场景启动器.搭建项目时,通过引入SpringBoot为我提供的 ...
- 税收分类编码2020_增值税开票系统你会吗?2020最新开票(金税盘版)图文教程详细版...
做会计的都或多或少的涉及到增值税,增值税也算是我们税务里面占比比较大的,那么增值税发票怎么开?增值税开票软件怎么操作?你都会吗?你曾经会是不是都忘记了? 今天会计君和大家分享一份完整的增值税发票开票软 ...
- SpringBoot 自定义starter 保姆级教程(说明+源码+配置+测试)
1.说明 命名归约-官方命名: 前缀:spring-boot-starter-xxx(比如:spring-boot-starter-web) 命名归约-自定义命名: xxx-spring-boot-s ...
- HTC Android系统 自定义ROM定制图文教程
小弟写得差 请勿拍砖,如果有意见请直接回复本贴!谢谢! 技术有限,部分可能不详细或者错误的请各位指出,大家交流! 前言: 一个完整的ROM根目录会有以下几个文件夹及文件: data META-IN s ...
- Linux-安装 Ubuntu Server 16.04 X64(图文教程详细版)
场景 VMware中安装unbuntu 16.04 server-amd64. VM的安装与ubuntu 16 的安装与下载不再描述. Ubuntu 16.04版本下载地址: https://dow ...
- IDEA集成Scala图文教程详细步骤
第一次用IDEA创建Scala Project的时候会提示你安装Scala SDK,它里面可以直接下载sdk,但是建议不要这么做,如果遇到被墙的情况会导致IDEA卡住不动. 自己去官网下载,插件下载路 ...
- System之Ubuntu:VMware虚拟机 Ubuntu安装详细过程(图文教程,最强攻略,步骤详细,建议收藏)
System之Ubuntu:VMware虚拟机 Ubuntu安装详细过程(图文教程,最强攻略,步骤详细,建议收藏) 导读 不是每一个程序员都必须玩过linux,只是博主觉得现在的很多服 ...
最新文章
- 有一说一,AI 到底会不会伤害人类?
- 在EXT中前后台传数据的方式
- Oracle 之instant client
- 用SSE加速CPU蒙皮计算
- java面向服务编程_设计面向领取驱动(DDD)的微服务
- C语言字符型char和整型int的关系和示例
- websocket 初识
- python3.9性能_谁说Python性能差的
- 以下哪个不是迭代算法的缺点_深究递归和迭代的区别、联系、优缺点及实例对比...
- 全家福缺一个人怎么P图上去-免费+效果好
- double转换为二进制
- 欢迎莅临HPX华南理工大学——产品经理职业规划讲座
- 常用字符串API实现(笔试会考)
- 防止登录成功后重复刷新页面跳回登录页面
- java全栈系列之JavaSE-稀释数组029
- Spring框架的ImportSelector到底可以干嘛
- RFID技术有零售行业的应用
- 密歇根安娜堡大学计算机专业硕士,2020年密歇根大学安娜堡分校硕士专业设置...
- iOS小技能:文件上传和下载(断点下载、断点续传)
- vue 计算文件hash值_vue项目打包文件增加hash值