如何不使用@SpringBootApplication注解启动Spring Boot项目?
不用@SpringBootApplication启动Spring Boot项目的可行方案
@SpringBootApplication本质是三个核心注解的组合:@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。要替代它启动你的项目,有两种直接满足要求的方案,全程只需要Java类,不需要XML、webapp或HTML文件:
方案一:用核心注解组合替代
直接在启动类上标注这三个注解,效果和@SpringBootApplication完全一致,是最常用的替代方式:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.annotation.SpringBootConfiguration; import org.springframework.context.annotation.ComponentScan; @SpringBootConfiguration // 等价于@Configuration,标记这是Spring Boot的配置类 @EnableAutoConfiguration // 开启Spring Boot的自动装配逻辑,保持原项目的自动配置能力 @ComponentScan(basePackages = "com.your.project.root") // 指定扫描你项目的根包,确保entities、repositories、services、controllers都被覆盖 public class CustomBootApplication { public static void main(String[] args) { SpringApplication.run(CustomBootApplication.class, args); } }
注意把com.your.project.root替换成你实际的项目根包路径,比如如果你的实体类在com.example.entity,控制器在com.example.controller,根包就是com.example。
方案二:纯Java代码手动启动(无注解)
如果想要完全脱离注解,也可以通过代码手动构建Spring Boot的应用上下文:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import java.util.List; public class ManualBootApplication { public static void main(String[] args) { // 初始化Spring应用实例 SpringApplication app = new SpringApplication(); // 配置自动装配的基础包,对应@EnableAutoConfiguration的作用 AutoConfigurationPackages.register(new AnnotationConfigApplicationContext(), "com.your.project.root"); // 添加组件扫描规则,对应@ComponentScan的作用 app.addPrimarySources(List.of( ComponentScan.class.getDeclaredConstructor(String[].class).newInstance((Object) new String[]{"com.your.project.root"}) )); // 如果有自定义配置类,直接添加到应用源中 // app.addSources(YourCustomConfig.class); // 启动应用 app.run(args); } }
这种方式完全通过代码控制Spring Boot的启动流程,没有任何注解依赖,同样能加载你所有的业务组件和自动配置。
额外注意事项
- 无论哪种方案,确保包路径配置正确,否则Spring无法扫描到你的entities、repositories等组件。
- 如果项目中有数据库连接、第三方服务配置等自定义配置类,只需要将它们加入到Spring的加载源中即可(比如方案二中的
app.addSources方法)。 - 两种方案都能保持原项目的REST接口正常对外提供服务,不需要额外修改业务代码。
内容的提问来源于stack exchange,提问作者Tilek Zholdoshbek
相关产品推荐
相关产品推荐

