如何找到 Spring Boot 应用程序的入口点?
Posted
技术标签:
【中文标题】如何找到 Spring Boot 应用程序的入口点?【英文标题】:How to find entry point of a Spring Boot application? 【发布时间】:2019-09-11 14:42:51 【问题描述】:spring boot 应用的入口点是什么?
在浏览 Spring Boot 应用程序代码时,它所说的只是代码
public static void main having - SpringApplication.run(Application.class, args)
示例 - SpringBoot2RestServiceApplication.java .
但是如何通过代码来了解入口点是什么。早些时候,如果我们通过applicationContext.xml
- 示例 - applicationContext.xml,我们可以理解流程。
有什么方法,或者可以遵循一个标准来使这种理解不言自明?
我的问题更多是了解应用程序的流程,而不是查找主类。一种选择可能是将配置(@Configuration)分离到具有多个 @Bean 注释的单独类中,这将有助于在一个位置找到所有 bean 连接。是否有大型项目用来使代码流易于理解的标准?
【问题讨论】:
【参考方案1】:我认为 OP 正在研究现有的 Spring Boot 应用程序,并询问如何定位任何运行程序,例如 Application Runners、Command Line Runners、MVC 控制器、Rest 控制器等。
我不知道是否有一种简单的方法可以找到它们,除非它们在原始设计中被组合在一起。
以编程方式执行是一个难题,因为线程可以在 Spring 之外启动,例如在构造函数或 @PostConstruct 中。
如果有 IDE 支持可以轻松找到 Spring Boot 启动的任何内容,那就太好了
【讨论】:
项目是否可以遵循一些好的实践来设计 Spring Boot 应用程序,使代码更具可读性和理解应用程序的流程。就像以前有提供流程的 applicationContext.xml 一样,可以遵循基于注释的应用程序的类似实践。【参考方案2】:在你的项目中搜索@SpringBootApplication注解,带有@SpringBootApplication注解的类会自动对子包进行组件扫描。
如果没有找到@SpringBootApplication注解,则搜索扩展“SpringBootServletInitializer”的类,这也是Spring Boot应用程序的起点
【讨论】:
一个项目中的多个类很可能有该注释【参考方案3】:最简单的方法可能是在您的代码中搜索@SpringBootApplication
。
但是,获取此信息的可靠方法是构建 Spring Boot JAR。从那里,您可以打开生成的 JAR 并在 META-INF/MANIFEST.MF
下找到清单中定义的主类。你会在Start-Class
属性下看到它:
Start-Class: com.example.foo.Application
【讨论】:
我的问题更多是了解应用程序的流程,而不是找到主类。例如,一个 Spring Boot Web 服务应用程序,@RestTemplate 类可以作为入口点,以了解从哪里开始了解代码。一种选择是在具有 @Bean 注释的单独类中分离配置,这将有助于在一个位置找到所有 bean 连接。有没有大型项目用来解决这个代码理解问题的标准? @ManojMohandas 如果我理解你的问题,这个流程是由程序员管理的,可以在设计时控制。 @HimadriMandal - 有标准的做法吗?就像一个很好的遵循方式,其他大型项目也遵循同样的方式?我正在寻找一个新开发人员只是克隆项目并花费 1-2 天而没有(或非常有限)帮助理解代码库的东西。 我认为 OP 正在研究现有的 Spring Boot 应用程序,并询问如何定位任何运行器,例如 CommandLineRunner、MVC 控制器、Rest 控制器等。我不知道是否有找到它们的简单方法,除非它们在原始设计中组合在一起以上是关于如何找到 Spring Boot 应用程序的入口点?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot:Oauth2:访问被拒绝(用户是匿名的);重定向到身份验证入口点
将 java_opts 传递给 Kubernetes 中的 Spring Boot 应用程序