SpringBoot常用注解

SpringBoot常用注解

前言

最近的面试中,不止一次的被问到了SpringBoot的常用注解。正好顺便来梳理一下,做个总结。

常用注解

1. @SpringBootApplication

@SpringBootApplication是SpringBoot的一个核心注解,作用在SpringBoot的启动类上。

当我们在创建一个SpringBoot项目时,会创建一个启动类。

java 复制代码
@SpringBootApplication
public class BaseApplication {

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

我们点进@SpringBootApplication注解,会发现他包含了三个注解@SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan。

java 复制代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

@SpringBootConfiguration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类

@EnableAutoConfiguration:启动SpringBoot自动配置

@ComponentScan:Bean扫描,扫描那些被Spring管理的Bean。如:@Controller, @Component等

2. Spring Bean相关的注解

@Component,@Controller,@Service,@Repository

@Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。

@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。

@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。

@Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

@Configuration

我们一般用来声明这个类是一个配置类。

@Bean

一般作用在方法上,用来注入一个Spring Bean。

java 复制代码
@Bean
@ConditionalOnClass(ThreadPoolExecutor.class)
public ThreadPoolExecutor myThreadPool() {
    return new ThreadPoolExecutor(10, 10, 10, TimeUnit.SECONDS,new ArrayBlockingQueue<>(100));
}

@RestController

@RestController可以看作是@Controller和@ResponseBody两个注解,表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器。

@Scope

声明 Spring Bean 的作用域。

java 复制代码
@Bean
@Scope("singleton")
public User getUser() {
    return new User();
}

singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。

prototype : 每次请求都会创建一个新的 bean 实例。

request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。

session : 每一个 HTTP Session 会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

@Autowried

自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。

java 复制代码
@RestController
@RequestMapping("excel")
public class ExcelUserController {

    @Autowired
    private  UserService userService;

}

3. Http请求相关的注解

@RequestMapping,@PostMapping,@GetMapping,@PutMapping,@DeleteMapping

用来标识接口的请求路径。

@RequestMapping:作用在类上。

@PostMapping:post请求的

@GetMapping:get请求的

@PutMapping:update请求

@DeleteMapping:delete请求

@RequestBody

作用于post请求的参数体。

java 复制代码
@PostMapping("/add")
public String add(@RequestBody User user) {
    return "ok";
}

@RequestParam,@PathVariable

@PathVariable:用于获取路径参数,rest请求。

@RequestParam:用于获取查询参数,url?parm=。

java 复制代码
@GetMapping("/user/{userId}/list")
public List<User> userList(
         @PathVariable("userId") Long userId,
         @RequestParam(value = "type", required = false) String type ) {
...
}

4.全局异常处理

  1. @ControllerAdvice :注解定义全局异常处理类
  2. @ExceptionHandler :注解声明异常处理方法
java 复制代码
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    /**
     * 请求参数异常处理
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
       ......
    }
}

5. 事务相关@Transactional

在要开启事务的方法上使用@Transactional注解即可!

java 复制代码
@Transactional(rollbackFor = Exception.class)
public void save() {
  ......
}

6. 读取配置

@Value

使用 @Value("${property}") 读取比较简单的配置信息:

java 复制代码
@Value("${auth.url}")
private String authUrl;
@ConfigurationProperties

通过@ConfigurationProperties读取配置信息并与 bean 绑定.

java 复制代码
@Component
@ConfigurationProperties(prefix = "library")
class LibraryProperties {
    @NotEmpty
    private String location;
    private List<Book> books;

    @Setter
    @Getter
    @ToString
    static class Book {
        String name;
        String description;
    }
  省略getter/setter
  ......
}

@PropertySource

@PropertySource读取指定 properties 文件

java 复制代码
@Component
@PropertySource("classpath:website.properties")

class WebSite {
    @Value("${url}")
    private String url;

  省略getter/setter
  ......
}

总结

这里主要列举了一些比较常用的注解,可能不是很全面,希望对大家有帮助。

相关推荐
HackTorjan4 小时前
深度神经网络的反向传播与梯度优化原理
人工智能·spring boot·神经网络·机器学习·dnn
直奔標竿14 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
敖正炀15 小时前
WebFlux 深度:Reactor 线程模型、背压与错误处理
spring boot
BING_Algorithm16 小时前
一文搞定 AOP 所有核心知识点
spring boot·后端·spring
勿忘初心122116 小时前
【Java实战】SpringBoot 集成 freemarker 导出 Word 模板
java·spring boot·freemarker·模板引擎·word导出·后端实战
绿草在线16 小时前
SpringBoot项目实战:从零搭建高效开发环境
java·spring boot·后端
空中海18 小时前
Spring Boot Kafka 项目 Demo:订单事件系统 专家知识、源码阅读路线与面试题
spring boot·kafka·linq
默 语2 天前
基于 Spring Boot 3 + LangChain4j 快速构建企业级 AI 应用实战
人工智能·spring boot·后端
薪火铺子2 天前
SpringBoot WebServer启动与监听器原理深度解析
spring boot·后端·tomcat
KmSH8umpK2 天前
SpringBoot 分布式锁实战:从单机锁到Redis分布式锁全覆盖,解决超卖、重复下单、幂等并发问题
spring boot·redis·分布式