spring-boot:run 是怎么找到使用了注解@SpringBootApplication的

《mvn spring-boot:run 指令是怎么运行起spring boot项目的》 上一篇的文章介绍了这个指令是怎么运行起一个spring boot项目的,可是并未详细说是怎么找到使用了注解@SpringBootApplication并含有main方法的类的,本文就打算说一下这个。java

查找主类的代码,在spring-boot-tools/spring-boot-loader-tools的MainClassFinder.java,关键方法是static <T> T doWithMainClasses(File rootFolder, MainClassCallback<T> callback)git

顺着这个方法的代码,注意到spring有一套自用的asm框架,用来解析*.class 文件的,即解析字节码的。再搜了下,Java如今也有一套成熟的asm框架https://asm.ow2.io/,切面编程说是都须要用到asm。github

asm解析后都使用访问者模式来访问解析后的代码,能够判断这个类有没有main方法,使用了哪些类注解等等信息,这样子就可以找到使用了注解@SpringBootApplication并含有main方法的类,而后就能运行起来,让spring boot项目跑起来了。spring

抽丝剥茧后,我精简了代码,运行起来能够找到一个spring boot项目的主类,代码在 https://github.com/shahuwang/..., springboot_mainclass_finder 这个tag便是。编程

这里面的核心就是用asm解析*.class文件,而后获取代码的相关信息。segmentfault

相关文章
相关标签/搜索