SpringBoot框架开发常用的注解

启动类注解

启动类上面的注解

SpringBootApplication 注解,是三个注解的合并。

alt

@SpringBootConfiguration
表示当前类是一个Spring的配置类,Spring在启动的时候会读取这个类的配置
@ComponentScan
用来扫描的,默认扫描子包下面的
EnableAutoConfiguration
开启自动配置,自动配置spring应用所需的组件

Controller 接受 Http 请求,解析参数

@RequestMapping  通用了接受http请求,具体常用的是get、post、delete、put请求

具体一点是
@GetMapping  @PostMapping  @PutMapping  @DeleteMapping  一共四个Http请求

@RequestMapping("/file")  可以放在上面配置一个基础的路径,上面四个用来配置具体的路径。

对于get请求有两种参数方式,一个是查询参数,一个是路径参数。

查询参数 http:localhost:8080/user/get?id=1;

路径参数 http:localhost:8080/user/get/1

查询参数 使用 @RequestParam Integer id; 这样来接收。

alt

对于路径参数 使用 PathVairable注解来接收参数。

alt

对于表单请求 Post,数据携带携带在请求体中,使用RequestBody注解来接收,SpringMVC 将数据映射到对象上面去。

@PostMapping("/add")
public void test03(@RequestBody User user){

}

RestController

这个注解是Controller和ResponseBody的结合。

  • @Controller:表示该类是一个控制器,能够处理 HTTP 请求。

  • @ResponseBody:表示方法返回的对象会直接通过 HTTP 响应返回,而不是渲染为视图。

  • @Controller 注解用于传统的 Web 应用,通常会返回视图名,由视图解析器(如 Thymeleaf 或 JSP)来渲染视图。

  • @RestController 注解用于构建 RESTful API,方法返回的不是视图,而是直接返回数据(通常是 JSON)。

全局异常处理器

对于异常处理需要配置全局异常处理器。

用来了两个注解,一个是**RestConrollerAdvice注解,另一个是ExceptionHanler**注解。

**@ControllerAdvice**** 用于定义全局的异常处理、全局数据绑定、全局模型属性等。 **

**@ExceptionHandler**** 注解用于定义一个方法来处理特定类型的异常。它可以处理控制器方法中抛出的异常,能够捕获特定的异常并返回自定义的响应。**

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)  //可以使用自定义的注解.class 
    public Result handleException(Exception ex) {
        return Result.error(ex.getMessage());
    }
}

@Component

@Component 是一个通用的 Spring 注解,用于标记一个类作为 Spring 容器中的一个 Bean,可以用于任何层次(包括 DAO、服务层、控制器等)。

提供派生的注解方式

@Service 表示自己是服务层组件
@Repository 标记数据访问层 Dao 组件
@Controller 用来标记控制器类组件  这是SpringMVC的控制器,用来处理请求并返回视图。

依赖注入

IOC实现了控制反转,讲Bean的创建交给了Spring容器去做,现在需要实现依赖注入,创建对象。

@Autowired 注解告诉 Spring 框架自动将需要的 Bean 注入到指定的字段、构造器或方法中,Spring 容器会根据类型或名称自动找到匹配的 Bean 并注入。

Lombok

Lombok 是一个 Java 库,通过注解的方式,自动生成常见的样板代码(如 getter、setter、toString、equals、hashCode、构造器等),从而简化 Java 类的代码编写,提升开发效率。Lombok 利用注解处理器(annotation processor)在编译时自动生成代码,这样开发者就不需要手动编写这些重复的、冗长的代码了。

自动生成getter、setter、toString、equals、hashcode、构造器等方法,提高了开发的效率。

@Data 是一个组合注解,包含了 @Getter@Setter@ToString@EqualsAndHashCode 以及 @RequiredArgsConstructor

Data

正常使用三个注解即可。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Carousel {
    private Integer id;
    private String imageUrl;
}

Builder

使用 <font style="color:#403f53;background-color:#fbfbfb;">@Builder</font> 注解,Lombok 会自动为你生成一个构建器类,通过该构建器可以设置对象的各种属性,并最终构建出该对象。这个方式避免了传统构造器方法中传递过多参数的冗长,提供了更加直观和灵活的对象创建方式。

alt

sneakyThrows

对于出现异常的方法可以使用下面的:

<font style="color:#403f53;background-color:#fbfbfb;">@SneakyThrows</font> 注解用来自动抛出检查型异常,避免手动捕获或声明异常。这对于简化代码和避免不必要的异常声明非常有用。

自动抛出检查形异常;

alt

RequiredArgsConstructor

通过RequiredArgsConstructor +final 关键字,实现对象的注入。

  • **@RequiredArgsConstructor**:这是 Lombok 提供的注解,它会自动生成一个构造器,该构造器包含所有被 final 修饰的字段和被 ``
  • **final**** 关键字**:将字段标记为 final,意味着该字段一旦赋值就不能被修改。通过将依赖注入的字段设置为 final,可以确保它们在对象创建后不会被更改,从而增强对象的不可变性。
@RequiredArgsConstructor
public class UserController {

  
    private  final  UserService userService;

读取yml文件

有一些信息在yml文件中进行了配置,在代码中需调用信息。

@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;

@Value 是 Spring 框架中用于注入属性值的注解。它通常用于将外部配置文件(如 application.propertiesapplication.yml)中的属性值注入到 Spring 管理的 Bean 中。

配置类注解

@Configuration 是 Spring 框架中的一个注解,用于标识一个类作为配置类(Configuration Class),该类可以包含 Spring 容器的 bean 定义。通常,使用 @Configuration 注解的类中会定义一些 @Bean 注解的方法,这些方法用于向 Spring 容器注册 bean,从而支持通过 Java 配置来代替 XML 配置文件。

@Configuration
public class MinioConfig {

    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;

     //Spring会自动扫描,并注册Bean实列
    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }

}

处理文件

@RequestPart("file") MultipartFile file

通过这个来接受前端传递过来的文件信息

#SpringBoot框架开发常用的注解#
牛牛的面试专栏 文章被收录于专栏

牛牛的面试专栏,希望自己在25年可以拿到一份大厂的SP Offer 你的点赞和收藏都是我持续更新的动力

全部评论

相关推荐

03-11 12:42
已编辑
门头沟学院 Java
腾讯复试实习问难点:没有难点,勉强说一个我简历上写的是缓解热key&nbsp;他说既然你写的是缓解,如何解决这个问题然后问我分布式缓存的意义&nbsp;既然已经有了本地缓存问我如何保证他两的一致性,他的意思是canal+binlog已经可以毫秒级同步了,过度设计了。因为我提到了更新时候,先更新DB,删缓存,就问了我如果这时候超级多流量达到DB咋办。我想不到,最终他的意思是&nbsp;先用本地锁运行几个访问db这时缓存里面就有了(我是傻子,选了加分布式锁+MQ&nbsp;然后在MQ的路上越走越远,其实我最开始的想法就是&nbsp;很快,缓存就同步了。)不过面试官很好,我其实可以不着急慢慢想很多人发帖子,忘了。朋友圈获取我关注人,按时间&nbsp;忘记了问我我一个项目流程,我讲的很快,因为我电脑要没电了&nbsp;今天下午快4点通知我晚上7点面我找不到自习室哎-------我之前在牛客看到这些场景题但是我没准备,我以为复试还是项目+力扣呢------------qs让我说我自己的优点我就说了个自律&nbsp;哎腾讯加面为啥加了本地缓存还是不能缓解热key&nbsp;本地缓存过期策略是啥,面试官慢慢在引导我,可是我回想有些我没有说出来JDK&nbsp;升级:肯定不会一上来就升级啊,你们没有查接口调用耗时+full&nbsp;gc&nbsp;young&nbsp;gc耗时,我:我不知道库存扣减会不会出现redis和mysql不一致,会不会出现超卖或少卖回滚库存是一起回滚的嘛?会不会出现redis和mysql不一致手撕先一道hot100&nbsp;后面又出了一道说时间没道+我初试表现不好要考察代码能力美团二面&nbsp;日常全程30分钟不到。介绍到一半就打住了,问springboot&nbsp;mysql慢查询如果走了索引还有啥可能,你咋排查慢sql&nbsp;OOM用啥软件/命令&nbsp;项目难点&nbsp;手撕:K个链表反转就结束了&nbsp;他说一周通知我结果&nbsp;美团一面:SpringSpringBoot就是提供了运行时候容器tomcat之类的,自动配置starter怎么定义一个bean介绍Spring&nbsp;介绍AOP&nbsp;IOC&nbsp;没答好好久没看了B+树矮胖为啥就好呢?磁盘IO少Redisson里面有很多锁,你用的是哪个syn锁升级不知道JVM内存结构没说对项目1既然用了RabbitMQ为啥延迟队列不用他索引&nbsp;mysql二叉树最大路径和美团一面太友好了呜呜呜&nbsp;早知道我早点面了,感觉面太晚了没hc了哎&nbsp;从上周五拖到这周二(上周二发的面试邀约&nbsp;#滴滴一面挂#&nbsp;滴一面挂#&nbsp;redis&nbsp;mysql区别(主要是&nbsp;单线程&nbsp;/&nbsp;多线程设计了锁+MVCC+事务隔离机制解决并发问题&nbsp;redis事务只有原子性,没有一致性隔离性持久性)手撕&nbsp;我TM把do{l++;}语法写错了&nbsp;面试官也没要求我写输入输出我tm自己写还给自己挖坑,因为我写的new&nbsp;int[1000]初始化都是0&nbsp;三数之和就会出现很多0+0+0=0面试官摄像头都没开,最后还说了他们是go腾讯一面让我选实习印象深刻的,然后介绍收益&nbsp;你这需求上线了么上线了都没衡量为啥要做??HTTP4啥时候出???不知道&nbsp;那HTTP3呢,,emmm说了一点HTTP3的QUIC&nbsp;还有啥优化不知道扣减的重复消费(没复习项目哎虚拟线程mysql死锁&nbsp;主从开头问我大模型我以为是kpi不知名厂:git解决冲突,我说手动springboot预热命令&nbsp;不知道&nbsp;他想问的健康检查嘛#面试常问题系列# #牛客创作赏金赛# #蚂蚁求职进展汇总#
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务