SpringBoot 的核心注解

本文介绍了SpringBoot项目的核心启动类及@SpringBootApplication注解的作用原理。详细解释了@Configuration、@EnableAutoConfiguration和@ComponentScan这三个核心注解的功能,并展示了如何关闭特定的自动配置。此外还介绍了自定义启动图案的方法。
SpringBoot启动类与核心注解@SpringBootApplication

  SpringBoot的项目一般都会有注解 @SpringBootApplication 标注的入口类,入口类中会有一个main方法,main 方法是一个标准的 java 应用程序的入口方法,可以直接启动

  @SpringBootApplication 注解是SpringBoot的核心注解,用此注解标注的入口是应用启动类,通常会在启动类的main方法中通过 SpringApplication.run(App.class,args) 来启动SpringBoot应用

@SpringBootApplication注解的源码实现

@SpringBootApplication其实是一个组合注解,我们可以看下源代码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
    //此处省略
}
源码分析:

  前四个注解是元注解,用来修饰当前注解,就像public类的修饰词,无实际功能。后三个注解是真正起作用的注解
主要有三个核心的注解

(1)@Configuration
  该注解类标识这个类可使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象被注册为在Spring应用程序中上下文的bean

(2)@EnableAutoConfiguration
  启动自动配置,该注解会让SpringBoot根据当前项目锁依赖的jar包自动配置项目的相关配置项。

(3)@ComponentScan
  会自动扫描指定包下全部标有@Component的类,并注册成bean,当然包括@Component下的子注解:@Service,@Repository,@Controller;默认会扫描当前包和所有子包。

@SpringBoot配置
关闭某个自动配置

  通过上面讲的@SpringBootApplication下的@EnableAutoConfiguration可以知道,SpringBoot会根据项目中的jar包依赖,自动做出配置,SpringBoot支持部分自动配置,如下:

假如我们添加mybatis依赖,但是不想自动配置mybatis,想自己手动配置,通过查看@SpringBootApplication的源码可以看出,关闭特定的自动配置可以使用@SpringBootApplication下的exclude参数,如:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

或者使用@EnableAutoConfiguration注解

@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
@EnableAutoConfiguration(excludeName = "com.java.service")

如果不配置以上将会报错:

java.lang.IllegalStateException: Cannot load configuration class: org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
自定义SpringBoot启动图案

SpringBoot默认的启动图案是这样的
在这里插入图片描述
如果想把这个团换成其它的可以访问这个网址 修改启动图案点这里

在这里插入图片描述
将复制的图案存到一个banner.txt的文件里,然后放到与application.properties同目录下就可以了
在这里插入图片描述
再次启动可以看到刚刚设置的图案
在这里插入图片描述

在 Spring Boot 框架中,核心注解是实现自动化配置和简化开发流程的关键工具。它们不仅能够减少冗余代码,还能显著提升项目的可维护性和扩展性。以下是一些核心注解及其作用的详细介绍。 ### 核心注解及其作用 #### `@SpringBootApplication` `@SpringBootApplication` 是一个组合注解,它集成了 `@Configuration`、`@EnableAutoConfiguration` 和 `@ComponentScan` 的功能。这个注解通常用于主上,标识一个 Spring Boot 应用的主配置,并告诉框架如何进行自动配置和组件扫描[^2]。 #### `@Configuration` `@Configuration` 注解用于定义配置,该通常包含一个或多个 `@Bean` 方法。这些方法返回的对象会被 Spring 容器管理,作为应用程序中的 Bean 使用。 #### `@EnableAutoConfiguration` `@EnableAutoConfiguration` 启用 Spring Boot 的自动配置机制。该机制会根据路径中的依赖项和项目配置,自动选择并应用合适的配置[^2]。 #### `@ComponentScan` `@ComponentScan` 用于自动扫描和注册 Bean。它可以指定扫描的基础包路径,从而发现和注册带有 `@Component`、`@Service`、`@Repository` 等注解[^2]。 #### `@RestController` `@RestController` 是 `@Controller` 和 `@ResponseBody` 的组合注解,主要用于构建 RESTful Web 服务。它将控制器的所有方法的返回值直接序列化为 JSON 或 XML 格式,并返回给客户端。 #### `@RequestMapping` `@RequestMapping` 用于将 HTTP 请求映射到控制器的方法上。它支持多种 HTTP 方法(如 GET、POST 等),并且可以通过 URL 路径进行精确匹配。 #### `@GetMapping` 和 `@PostMapping` `@GetMapping` 和 `@PostMapping` 是 `@RequestMapping` 的特化版本,分别用于处理 GET 和 POST 请求。它们简化了对特定 HTTP 方法的映射配置。 #### `@PathVariable` 和 `@RequestParam` `@PathVariable` 用于从 URL 中提取参数,而 `@RequestParam` 用于获取查询参数。这两个注解在构建动态请求处理逻辑时非常有用。 #### `@RequestBody` 和 `@ResponseBody` `@RequestBody` 用于将请求体中的内容反序列化为 Java 对象,而 `@ResponseBody` 则用于将方法的返回值直接序列化为 JSON 或 XML 格式并写入 HTTP 响应体中。 #### `@Profile` `@Profile` 用于根据当前的环境配置加载特定的 Bean 或配置。例如,可以使用 `@Profile("dev")` 来标记某个 Bean 仅在开发环境中加载[^3]。 #### `@ConfigurationProperties` `@ConfigurationProperties` 用于绑定配置文件中的属性到一个 Java 对象中。它支持嵌套属性和型安全的配置绑定,非常适合处理复杂的配置信息[^3]。 #### `@Service` 和 `@Repository` `@Service` 通常用于业务逻辑层的,而 `@Repository` 用于数据访问层的。这些注解有助于明确代码的职责划分,并且可以被 Spring 自动扫描和注册为 Bean。 ### 示例代码 以下是一个简单的 Spring Boot 应用程序示例,展示了如何使用上述核心注解: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @RestController class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, Spring Boot!"; } } ``` 在这个示例中,`@SpringBootApplication` 标记了主,而 `@RestController` 和 `@GetMapping` 用于定义一个简单的 RESTful 接口。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值