SpringBoot常用注解

本文详细介绍了SpringBoot中常用的核心注解,如@SpringBootApplication、@ComponentScan、@Configuration、@RestController等的功能及使用方法,帮助读者更好地理解和使用这些注解。

@SpringBootApplication

@SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。
在这里插入图片描述

@ComponentScan

注解在类上,扫描标注了@Controller等注解的类,注册为bean ,为@Configuration注解的类配置组件扫描指令。

@ComponentScan 注解会自动扫描指定包下的全部标有 @Component注解的类,并注册成bean,包括 @Component下的子注解@Service、@Repository、@Controller。

@Configuration

Spring Boot提倡基于Java的配置。尽管可以用一个XML源来调用SpringApplication.run() ,不过通常建议使用 @Configuration 类作为主要源。

一般定义 main 方法的类也是主要 @Configuration 的一个很好候选。并且通过使用 @ComponentScan 注解自动收集所有的Spring组件,包括 @Configuration 类。

如果需要使用基于XML的配置,建议仍旧从一个 @Configuration 类开始。可以使用附加的 @ImportResource 注解加载XML配置文件。

@EnableAutoConfiguration

启用 Spring 应用程序上下文的自动配置,试图猜测和配置您可能需要的bean。自动配置类通常采用基于你的classpath 和已经定义的 beans 对象进行应用。

被 @EnableAutoConfiguration 注解的类所在的包有特定的意义,并且作为默认配置使用。通常推荐将 @EnableAutoConfiguration 配置在 root 包下,这样所有的子包、类都可以被查找到。

@RestController

这是一个结合了 @ResponseBody 和 @Controller 的注解

  • 如果使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
    在这里插入图片描述
  • 如果需要返回到指定页面,则需要用@Controller配合视图解析InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

@ResponseBody

注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用。

通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。

@Controller

用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。

@RequestMapping

可以使用@RequestMapping 来映射URL 到控制器类,或者是到Controller 控制器的处理方法上。

当@RequestMapping 标记在Controller 类上的时候,里面使用@RequestMapping 标记的方法的请求地址都是相对于类上的@RequestMapping 而言的。

当Controller 类上没有标记@RequestMapping 注解时,方法上的@RequestMapping 都是绝对路径。这种绝对路径和相对路径所组合成的最终路径都是相对于根路径“/ ”而言的。

@RequestBody

常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类。

@RequestBody接收的是一个Json对象的字符串,不是一个Json对象。jax请求往往传的都是Json对象,需要用 JSON.stringify(data)的方式就能将对象变成字符串。

@Autowired

按类型注入(这个注解是属于spring的)。

默认属性required= true;当不能确定 Spring 容器中一定拥有某个类的Bean 时, 可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false), 这等于告诉Spring:在找不到匹配Bean时也不抛出BeanCreationException 异常。

@Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变byName 了。
@Autowired可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。

@Resource

按名称装配(这个注解属于J2EE的)。

默认安照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。

当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

@Mapper

在Dao接口类上添加@Mapper,在编译之后会生成相应的接口实现类,但这种方式要求每一个mapper类都需要添加此注解,比较麻烦。
在这里插入图片描述

@MapperScan

通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,

相当于在每一个Dao接口上写@Mapper,通常使用这个注解。
在这里插入图片描述

@Service

下图的(“UserService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action。
在这里插入图片描述

@Repository

@Repository用于标注数据访问组件,即DAO组件。

### Spring Boot 常用注解及功能说明 Spring Boot 是一个快速开发框架,通过整合常用的第三方依赖、简化 XML 配置并采用注解形式,内置 HTTP 服务器(如 Jetty 和 Tomcat),使得开发者可以以 Java 应用程序的形式执行项目[^3]。以下是 Spring Boot 中常用注解及其功能说明: #### 1. `@SpringBootApplication` 这是一个复合注解,整合了以下三个注解的功能: - **`@SpringBootConfiguration`**:标识当前类为 Spring Boot 的配置类[^1]。 - **`@EnableAutoConfiguration`**:启用 Spring Boot 的自动配置机制,根据项目中的依赖和应用上下文自动配置 Spring 应用程序[^2]。 - **`@ComponentScan`**:自动扫描指定包及其子包中的 Spring 组件,并将它们注册为 Spring 容器中的 Bean[^2]。 示例代码如下: ```java package com.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyStartApplication { public static void main(String[] args) { SpringApplication.run(MyStartApplication.class, args); } } ``` #### 2. `@Configuration` 用于标识一个类作为配置类,类似于 Spring XML 配置文件的作用。该注解通常与 `@Bean` 结合使用,定义方法返回的实例作为 Spring 容器中的 Bean[^3]。 示例代码如下: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } } ``` #### 3. `@Component`, `@Service`, `@Repository`, `@Controller` 这些注解都属于组件扫描的一部分,用于将类标记为 Spring 容器中的 Bean: - **`@Component`**:通用注解,表示该类是一个组件。 - **`@Service`**:用于业务逻辑层的类[^3]。 - **`@Repository`**:用于数据访问层的类[^3]。 - **`@Controller`**:用于控制器层的类,通常与 Web 层结合使用。 示例代码如下: ```java import org.springframework.stereotype.Service; @Service public class MyService { public String getMessage() { return "Hello, Spring Boot!"; } } ``` #### 4. `@RestController` 这是一个组合注解,相当于 `@Controller` 和 `@ResponseBody` 的结合。它主要用于构建 RESTful Web 服务,直接返回 JSON 或 XML 格式的数据。 示例代码如下: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @GetMapping("/message") public String getMessage() { return "Hello, RESTful API!"; } } ``` #### 5. `@Autowired` 用于自动装配依赖。它可以作用于构造函数、字段、Setter 方法等,Spring 容器会根据类型或名称自动注入相应的 Bean。 示例代码如下: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyService { private final MyRepository myRepository; @Autowired public MyService(MyRepository myRepository) { this.myRepository = myRepository; } public String getData() { return myRepository.findData(); } } ``` #### 6. `@Value` 用于从配置文件中读取属性值,或者直接赋值给字段。可以通过 `${}` 占位符获取配置文件中的值。 示例代码如下: ```properties app.name=MyApp app.version=1.0.0 ``` ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class AppInfo { @Value("${app.name}") private String name; @Value("${app.version}") private String version; public String getAppInfo() { return name + " - " + version; } } ``` #### 7. `@Bean` 用于在 `@Configuration` 类中定义方法,将方法返回的对象注册为 Spring 容器中的 Bean[^3]。 示例代码如下: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } } ``` #### 8. `@PostConstruct` 和 `@PreDestroy` 这两个注解分别用于定义 Bean 初始化后和销毁前的回调方法。`@PostConstruct` 标记的方法会在 Bean 创建完成后执行,而 `@PreDestroy` 标记的方法会在 Bean 销毁前执行[^4]。 示例代码如下: ```java import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.stereotype.Component; @Component public class MyComponent { @PostConstruct public void init() { System.out.println("Bean initialized."); } @PreDestroy public void destroy() { System.out.println("Bean destroyed."); } } ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值