代理启动Launcher

匿名 (未验证) 提交于 2019-12-03 00:32:02
  1. Spring Boot打包插件将启动类设为org.springframework.boot.loader.JarLauncher;
  2. 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);     }
  1. 注册Jar URL扩展协议处理器Handler;
  2. 创建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 });     }

参考:

  1. https://segmentfault.com/a/1190000013532009
文章来源: 代理启动Launcher
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!