- Spring Boot打包插件将启动类设为org.springframework.boot.loader.JarLauncher;
- JarLauncher内部通过反射调用应用程序入口类,启动应用;

JarLauncher 、WarLauncher 、PropertiesLauncher代表了Spring Boot的三种代理启动方式。
Spring Boot打包插件生成可执行Jar时,在MANIFEST.MF中将启动类设为JarLauncher,如下所示:
Manifest-Version: 1.0 Start-Class: com.manerfan.springboot.theory.WebApp Main-Class: org.springframework.boot.loader.JarLauncher public static void main(String[] args) throws Exception { new JarLauncher().launch(args); } - 注册Jar URL扩展协议处理器Handler;
- 创建ClassLoader(绑定当前Jar及嵌套Jar的URL);
protected void launch(String[] args) throws Exception { JarFile.registerUrlProtocolHandler(); ClassLoader classLoader = createClassLoader(getClassPathArchives()); launch(args, getMainClass(), classLoader); } 利用上述ClassLoader加载应用程序的启动类,通过发射调用main方法,启动应用程序,如下所示:
public void run() throws Exception { Class<?> mainClass = Thread.currentThread().getContextClassLoader() .loadClass(this.mainClassName); Method mainMethod = mainClass.getDeclaredMethod("main", String[].class); mainMethod.invoke(null, new Object[] { this.args }); } 参考:
文章来源: 代理启动Launcher