Spring Boot 3 @SpringBootApplication

Many Spring Boot developers like their apps to use auto-configuration, component scan and be able to define extra configuration on their "application class". A single @SpringBootApplication annotation can be used to enable those three features, that is:

  • @EnableAutoConfiguration: enable Spring Boot’s auto-configuration mechanism

  • @ComponentScan: enable @Component scan on the package where the application is located (see the best practices)

  • @SpringBootConfiguration: enable registration of extra beans in the context or the import of additional configuration classes. An alternative to Spring’s standard @Configuration that aids configuration detection in your integration tests.

// Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

### 解析 Spring Boot 项目中 `@SpringBootApplication` 导致项目无法启动的原因 在遇到 `@SpringBootApplication` 报红并提示 “Cannot resolve symbol ‘SpringBootApplication’” 的情况下,通常是因为缺少必要的依赖项或配置错误。具体原因可能涉及以下几个方面: #### 1. Maven 或 Gradle 配置不正确 确保项目的构建工具(Maven/Gradle)已经正确引入了 Spring Boot Starter Parent 和其他必需的依赖。 对于 Maven 用户,在 pom.xml 文件中应包含如下内容[^1]: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` #### 2. IDE 缓存问题 有时IDE缓存可能导致此类问题的发生。尝试清理和重建项目可以解决问题。例如,在 IntelliJ IDEA 中可以通过菜单栏选择 Invalidate Caches / Restart 来清除缓存。 #### 3. 启动类位置不当 如果应用程序入口不在根包或者子包内,则可能会导致组件扫描失败。默认情况下,`@SpringBootApplication` 注解包含了 `@ComponentScan` 功能,默认只会扫描当前包及其子包下的组件。因此建议将应用主类放置于最顶层父级目录下,比如 `com.example` 下面定义启动类 SkyServerApplication.java 如下所示[^2]: ```java package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SkyServerApplication { public static void main(String[] args) { SpringApplication.run(SkyServerApplication.class, args); } } ``` #### 4. 组件扫描范围调整 当存在多个模块或其他特殊需求时,可能需要自定义组件扫描路径来覆盖默认行为。此时可以在 `@SpringBootApplication` 上指定特定参数以改变其作用域;也可以通过单独添加 `@ComponentScan(basePackages="your.package.name")` 明确指明要扫描的基础包名列表。需要注意的是,一旦显式声明了 `@ComponentScan` ,则不再自动继承来自 `@SpringBootApplication` 的设置[^3]. ```java // 方法一:修改@SpringBootAppliaction 参数 @SpringBootApplication(scanBasePackages={"com.example","other.packages"}) public class CustomizedPackageScanApp {} // 方法二:增加@ComponentScan 覆盖原有配置 @SpringBootApplication @ComponentScan({"com.example", "another.base.pkg"}) public class AnotherCustomizedPackageScanApp {} ``` 以上措施能够有效处理由于 `@SpringBootApplication` 引起的应用程序无法正常运行的问题,并保证所有 Bean 及 Configuration 类被正确加载到上下文中去。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值