春风十里不如你——掌握Spring Boot的常用关键注解

引言

在Java的世界里,Spring Boot以其简化的配置和开箱即用的特性,成为了构建现代微服务和企业级应用的首选框架。Spring Boot的注解是这一切的核心。在本文中,我们将深入探讨最常用的Spring Boot注解,帮助你轻松驾驭Spring Boot的强大力量。

注解简介

注解(Annotations)是Java 5引入的一个重要特性,它提供了一种在代码中添加元数据的方法。在Spring Boot中,注解用于各种目的,如配置、数据管理、服务注入等。

核心注解

在Spring Boot中,有一些注解是你几乎每个项目都会用到的。理解这些注解对于有效地使用Spring Boot至关重要。

@SpringBootApplication

@SpringBootApplication是一个方便的注解,它封装了@Configuration@EnableAutoConfiguration,和@ComponentScan注解。这意味着它自动配置Spring应用上下文、扫描路径中的组件,并设置配置类。

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

@Autowired

@Autowired注解可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。通过@Autowired的使用来消除setter/getter方法。

@Service
public class MyService {
    @Autowired
    private MyRepository repository;
}

@Service

@Service注解是用在类上的,标识一个Bean是服务层组件。Spring将自动检测这些类进行依赖注入。

@Service
public class MyService {
    // ...
}

@Repository

@Repository注解用于标记数据访问组件,即DAO组件。它也用于将数据库操作产生的异常翻译为Spring的数据访问异常。

@Repository
public interface MyRepository extends JpaRepository<MyEntity, Long> {
    // ...
}

@Controller

@Controller注解标记一个类作为Spring MVC Controller处理器。

@Controller
public class MyController {
    // ...
}

@RestController

@RestController是一个组合注解,它结合了@Controller@ResponseBody的功能,这意味着数据不会被渲染为视图,而是直接写入HTTP响应体中。

@RestController
public class MyRestController {
    // ...
}

@RequestMapping

@RequestMapping注解用于定义请求的URL模式和HTTP方法。

@RestController
@RequestMapping("/api")
public class MyRestController {
    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public List<User> getUsers() {
        // ...
    }
}

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping

这些注解是@RequestMapping的专化版本,用于处理HTTP的GET, POST, PUT, DELETE方法。

@RestController
@RequestMapping("/api")
public class MyRestController {
    @GetMapping("/users")
    public List<User> getUsers() {
        // ...
    }
}

数据访问相关注解

Spring Boot提供了一套丰富的注解来简化数据库操作。

@Entity

@Entity注解标记一个类为实体类,它将映射到数据库的一个表。

@Entity
public class User {
    @Id
    private Long id;
    // ...
}

@Id

@Id注解声明了实体类的主键。

@Entity
public class User {
    @Id
    private Long id;
    // ...
}

@Column

@Column注解描述了数据库表中实体类属性与表的列的映射关系。

@Entity
public class User {
    @Id
    private Long id;

    @Column(name = "username")
    private String username;
    // ...
}

@Transactional

@Transactional注解用于声明一个事务边界。默认情况下,它会应用到所有的public方法上。

@Service
public class UserService {
    @Transactional
    public void updateUser(User user) {
        // ...
    }
}

配置相关注解

Spring Boot的自动配置是它的一大特色,但有时候我们需要自定义配置。

@Value

@Value用于将一个SpEL表达式结果或者属性值注入到Bean中。

@Service
public class MyService {
    @Value("${my.value}")
    private String myValue;
    // ...
}

@Configuration

@Configuration注解表明一个类声明了一个或多个@Bean方法,并且可能会被Spring容器用来生成Bean定义和服务请求。

@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

@Bean

@Bean注解告诉Spring这是一个需要被实例化为Bean的方法。

@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

@Profile

@Profile注解指定某些Bean只能在特定的profile被激活时创建。

@Configuration
@Profile("dev")
public class DevConfig {
    // ...
}

安全相关注解

Spring Security是Spring Boot的一个重要组成部分,它也提供了一系列注解。

@EnableWebSecurity

@EnableWebSecurity注解用于启用Spring Security的Web安全支持。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    // ...
}

@Secured

@Secured注解用于指定某个方法只能被拥有特定权限的用户访问。

@Service
public class SecureService {
    @Secured("ROLE_ADMIN")
    public void adminOnlyMethod() {
        // ...
    }
}

测试相关注解

Spring Boot提供了全面的测试支持,以下是一些测试时常用的注解。

@SpringBootTest

@SpringBootTest注解用于提供一个Spring Boot应用上下文的测试环境。

@SpringBootTest
public class MyApplicationTests {
    // ...
}

@DataJpaTest

@DataJpaTest提供了针对JPA应用的测试功能。

@DataJpaTest
public class MyRepositoryTests {
    // ...
}

@WebMvcTest

@WebMvcTest用于测试MVC应用,通常与@MockBean一起使用。

@WebMvcTest(MyController.class)
public class MyControllerTest {
    // ...
}

结语

掌握这些Spring Boot注解将帮助你更好地利用Spring Boot的特性,提升你的开发效率。记住,实践是学习的捷径,尝试在你的项目中使用这些注解,并观察它们如何简化你的代码和流程。

👉 💐🌸 CSDN请关注 "一叶飘零_sweeeet", 一起学习,一起进步! 🌸💐
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225870.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

simulink merge模块使用案例分析

作用&#xff1a;汇总多个信号分支&#xff0c;但最终可根据用户设定条件选择某路分支输出 Enabled Subsystem3 Enabled Subsystem2 分析&#xff1a;可以看到&#xff0c;在1s时刻输出 Enabled Subsystem2的1&#xff0c;在2s时刻输出 Enabled Subsystem3的2。 为方便理解&a…

私域最全养号攻略---微信

微信号的使用规则&#xff1a; 注册新微信、微信实名认证、主动添加好友、面对面建群、被动添加好友、进群限制、朋友圈限制、好友上限 微信权重加分规则&#xff1a; 基础信息是否完整、注册时间、微信使用行为、 微信权重扣分规则&#xff1a; 使用的环境是否正常、部分行为会…

GAN:WGAN

论文&#xff1a;https://arxiv.org/pdf/1701.07875.pdf 发表&#xff1a;2017 WGAN 算法流程 从GAN 到 WGAN 的转变 相比于原始 GAN&#xff0c;WGAN 只需要修改以下几点&#xff0c;就能使得训练更稳定&#xff0c;生成质量更高&#xff1a; 1. 此时的判别器相当于做回归…

JavaSE语法之五:数组的定义与使用(超详解!!!)

文章目录 一、数组的概念1. 什么是数组2. 数组的创建及初始化3. 数组的使用3.1 数组中元素的访问3.2 遍历数组 二、数组是引用类型1. 初始JVM的内存分布2. 基本类型变量与引用变量的区别3. 引用变量4. 认识null 三、数组的应用场景1. 保存数据2. 作为函数的参数2.1 参数传基本类…

2023年淘宝年终好价节精选红包怎么领取?

2023年淘宝年终好价节精选红包怎么领取? 2023年淘宝双十二改名为了年终好价节&#xff0c;活动力度也提升了&#xff0c;不仅有官方立减和跨店满减&#xff0c;还有精选红包可领。那么&#xff0c;2023年淘宝年终好价节精选红包怎么领取?下面小编就给大家介绍下&#xff0c;赶…

教程篇(7.2) 01. 介绍和初始访问 ❀ FortiAnalyzer分析师 ❀ Fortinet 网络安全专家 NSE5

在本课中&#xff0c;你将了解FortiAnalyzer的关键功能和概念&#xff0c;以及如何最初访问FortiAnalyzer。 FortiAnalyzer将日志记录、分析和报告集成到一个系统中&#xff0c;因此你可以快速识别和响应。 在本课中&#xff0c;你将探索上图显示的主题。 通过展示FortiAnalyze…

种下一棵栀子花

女孩说自己是男孩当年伸手就可触及的栀子花.男孩沉默了,明白了当初失去了什么. 时光倒流,13年前的一个夏天夜晚,男孩与女孩同在沪城,女孩分享了自己的照片给男孩.男孩站在窗前,那晚的夜空很美丽,仿佛托着那个白衣裳女孩的纯真的梦,来到了自己的身边. 女孩说彼此间只是少了一个深…

Linux---日志管理

本章主要介绍Linux中的日志管理 了解rsyslog是如何管理日志的查看日志的方法 日志管理简介 工作当中的日志&#xff0c;特指硬件和软件的日志&#xff0c;管理员可以通过它来检查错误发生的原因&#xff0c;或者寻找受到攻击时攻击者留下的痕迹。日志管理包括管理系统日志、应…

ArcGIS提示当前许可不支持影像服务器

1、问题&#xff1a; 在用ArcGIS上处理影像栅格数据时&#xff08;比如栅格数据集裁剪、镶嵌数据集构建镶嵌线等&#xff09;经常会出现。 无法启动配置 RasterComander.ImageServer <详信息 在计算机XXXXX上创建服务器对象实例失败 当前许可不支持影像服务器。 ArcGIS提示当…

如何通过内网穿透实现无公网IP也能远程访问内网的宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

java聊天程序(群聊)简单版

先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class QLFWD{public static ServerSocket server_socket;public static ArrayList<S…

LeetCode:1466. 重新规划路线(DFS C++、Java)

目录 1466. 重新规划路线 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 1466. 重新规划路线 题目描述&#xff1a; n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有…

联想范建平:联想混合AI架构具备两大明显优势

12月7日&#xff0c;首届AI PC创新论坛在北京联想集团总部举办。联想集团副总裁、联想研究院人工智能实验室负责人范建平表示&#xff0c;为提供真正可信、个性化的AI专属服务&#xff0c;联想提出了混合智能&#xff08;Hybrid AI&#xff09;概念&#xff0c;并已经显现出更强…

物联网智能水表如何保证用户隐私和数据安全?

随着科技的发展, 物联网已经渗透到了我们生活的各个领域, 智能水表作为其中的一种应用之一。但是&#xff0c;在使用智能水表时&#xff0c;不可避免地涉及到用户隐私和数据安全的问题。所以&#xff0c;我们应该如何保证智能水表的用户隐私和数据安全呢&#xff1f; 首先&…

Java面向对象(高级)-- 注解(Annotation)

文章目录 一、 注解概述&#xff08;1&#xff09; 什么是注解&#xff08;2&#xff09; 注解与注释&#xff08;3&#xff09; 注解的重要性 二、常见的Annotation作用&#xff08;1&#xff09;示例1&#xff08;2&#xff09;示例2&#xff08;3&#xff09;示例3 三、 三个…

自动化测试:PO模式详解!

PO&#xff08;Page Object&#xff09;模式是一种在自动化测试中常用的设计模式&#xff0c;将页面的每个元素封装成一个对象&#xff0c;通过操作对象来进行页面的交互。 概括来说就是&#xff0c;每个页面都有对应的PO类&#xff0c;PO类中包含了页面的元素定位和操作方法。…

OMSA无法打开无法显示等服务异常时如何处理

文章目录 为何需要重启OMSAWindows 重启OMSA服务Linux 重启OMSA服务VMware 环境重启OMSA服务重启无效的解决办法推荐阅读 为何需要重启OMSA 在安装 OMSA 的服务器中&#xff0c;OMSA 管理软件运行可能会不稳定。例如&#xff1a; 某些信息&#xff08;如存储信息&#xff09;…

使用DockerUI结合内网穿透工具轻松实现公网访问和管理docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

C - 语言->内存函数

目录 系列文章目录 前言 1. memcpy使⽤和模拟实现 1.2 memcpy函数的模拟实现: 2. memmove 使⽤和模拟实现 2.1memmove的模拟实现&#xff1a; 3. memset 函数的使⽤ 4. memcmp 函数的使⽤ 系列文章目录 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff…

我有才打造知识付费小程序

一站式线上线下活动管理 为用户提供“精彩城市生活和人脉资源”。 在线活动提供创业、互联网、科技、投资、金融、教育、亲子、生活、聚会交友、医疗、设计、分享会、脱口秀、音乐演出等多种活动类型, 为职场白领提升技能、拓展人脉、聚会交友的首选平台。 为主办方提供“一…