You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SpringApplication.run()方法要写在它所启动的类内部?

为什么SpringApplication.run()通常写在启动类内部?

其实这不是强制要求,但这是SpringBoot约定俗成的最佳实践,背后有几个实际原因:

  1. Java程序的入口规则限制
    Java程序的执行入口必须是public static void main(String[] args)方法,这个方法必须归属某个类。SpringBoot本质是Java程序,自然要遵守这个基础规则。把main方法放在带@SpringBootApplication的类里,相当于把「程序入口」和「核心配置类」合并,不用额外创建单独的入口类,简化项目结构。

  2. 与@SpringBootApplication注解的功能关联
    @SpringBootApplication是个组合注解,包含了@Configuration(标记为配置类)、@ComponentScan(自动扫描组件)和@EnableAutoConfiguration(开启自动配置)。当调用SpringApplication.run(ConsumingRestApplication.class, args)时,Spring会把这个类作为配置起点:

    • @ComponentScan默认会扫描该类所在包及其所有子包,自动注册Controller、Service等组件,无需额外配置扫描路径。
    • 这个类本身也可作为配置类,你能直接在里面写@Bean方法定义Bean,不用再单独编写配置类。
  3. 契合SpringBoot「约定大于配置」的核心思想
    SpringBoot的设计初衷就是减少繁琐配置,统一的项目结构能让开发者快速上手,团队协作时也不用纠结入口位置、配置类存放路径。大家都遵循这个写法,项目结构一目了然,降低沟通和维护成本。

当然你也可以把main方法放在其他类里,只要调用SpringApplication.run()时传入正确的配置类(带@SpringBootApplication或相关注解的类)即可,但这样反而会增加不必要的类,违背SpringBoot简化配置的初衷。示例里的写法是最简洁、最贴合SpringBoot设计思想的方式。

内容的提问来源于stack exchange,提问作者Gass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:05:27