当前位置: 首页 > news >正文

Spring和Spring Boot常用注解介绍及使用

Spring和Spring Boot框架通过丰富的注解集简化了Java开发,使得配置更加简洁且易于理解。

下面是一些常用的Spring和Spring Boot注解及其使用方式的简介:

目录

1. @Component

2. @Service

3. @Repository

4. @Controller

5. @RestController

6. @Autowired

7. @Value

8. @Configuration

9. @Bean

10. @SpringBootApplication

11. @EnableAutoConfiguration

12. @ComponentScan

13. @Conditional

14. @Profile

15. @Scope

16. @Lazy

17. @PostConstruct 和 @PreDestroy


1. @Component

概述: @Component是一个通用的Spring管理的Bean注解。

使用场景: 任何Spring管理的组件都可以使用@Component,但通常使用其特化注解(如@Service@Repository@Controller)来更明确地表达组件的角色。

@Component
public class MyComponent {public void doSomething() {System.out.println("Doing something...");}
}

2. @Service

概述: @Service@Component的特化,专门用于标识服务层的组件。

使用场景: 标识业务逻辑层的组件,表明该类承担业务服务功能。

@Service
public class MyService {public void performService() {System.out.println("Performing service...");}
}

3. @Repository

概述: @Repository@Component的特化,通常用于数据访问层。

使用场景: 用于DAO层,表明该类负责数据库操作,并启用自动异常转换。

@Repository
public class MyRepository {public void save() {System.out.println("Saving data...");}
}

4. @Controller

概述: @Controller@Component的特化,标识Spring MVC的控制器类。

使用场景: 用于标识控制器类,处理HTTP请求并返回视图。

@Controller
public class MyController {@GetMapping("/hello")@ResponseBodypublic String sayHello() {return "Hello, World!";}
}

5. @RestController

概述: @RestController@Controller@ResponseBody的组合注解。

使用场景: 用于创建RESTful web服务,返回JSON或XML响应。

@RestController
public class MyRestController {@GetMapping("/greet")public String greet() {return "Greetings!";}
}

6. @Autowired

概述: @Autowired用于自动注入依赖。

使用场景: 在需要依赖注入的地方(构造函数、字段、方法)使用,Spring会自动满足依赖需求。

@Component
public class MyComponent {private final MyService myService;@Autowiredpublic MyComponent(MyService myService) {this.myService = myService;}public void execute() {myService.performService();}
}

7. @Value

概述: @Value用于注入属性值。

使用场景: 注入配置文件中的值或系统环境变量。

@Component
public class MyComponent {@Value("${my.property}")private String myProperty;public void printProperty() {System.out.println("Property value: " + myProperty);}
}

8. @Configuration

概述: @Configuration标识配置类,相当于XML配置文件。

使用场景: 定义Bean并进行配置。

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}

9. @Bean

概述: @Bean用于定义一个Bean。

使用场景: 在配置类中使用,用于显式声明一个Bean。

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}

10. @SpringBootApplication

概述: @SpringBootApplication@Configuration@EnableAutoConfiguration@ComponentScan的组合注解。

使用场景: 标识Spring Boot主配置类,并启动自动配置和组件扫描。

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

11. @EnableAutoConfiguration

概述: @EnableAutoConfiguration让Spring Boot基于类路径中的依赖自动配置Spring应用上下文。

使用场景: 启用自动配置功能,大多数情况下不需要单独使用,因为@SpringBootApplication已经包含它。

@Configuration
@EnableAutoConfiguration
public class MyAutoConfiguration {
}

12. @ComponentScan

概述: @ComponentScan用于扫描指定包中的组件。

使用场景: 在配置类中使用,指定要扫描的包路径。

@Configuration
@ComponentScan(basePackages = "com.example")
public class MyComponentScanConfig {
}

13. @Conditional

概述: @Conditional根据条件决定是否实例化一个Bean。

使用场景: 在配置类中使用,配合条件类实现按条件装配。

@Configuration
public class ConditionalConfig {@Bean@Conditional(MyCondition.class)public MyService myService() {return new MyService();}
}

14. @Profile

概述: @Profile根据环境配置加载特定的Bean。

使用场景: 在开发、测试、生产等不同环境下加载不同的Bean。

@Configuration
public class ProfileConfig {@Bean@Profile("dev")public MyService devService() {return new MyService("Development Service");}@Bean@Profile("prod")public MyService prodService() {return new MyService("Production Service");}
}

15. @Scope

概述: @Scope定义Bean的作用域(单例、原型等)。

使用场景: 在需要特定作用域的Bean定义中使用。

@Component
@Scope("prototype")
public class MyPrototypeBean {// Bean will have prototype scope
}

16. @Lazy

概述: @Lazy指定Bean的延迟初始化。

使用场景: 在需要懒加载的Bean定义中使用,减少启动时间。

@Component
@Lazy
public class MyLazyBean {public MyLazyBean() {System.out.println("MyLazyBean initialized");}
}

17. @PostConstruct 和 @PreDestroy

概述: @PostConstruct@PreDestroy分别用于在Bean初始化后和销毁前执行特定方法。

使用场景: 在Bean生命周期的特定点执行自定义逻辑。

@Component
public class MyComponent {@PostConstructpublic void init() {System.out.println("MyComponent initialized");}@PreDestroypublic void destroy() {System.out.println("MyComponent about to be destroyed");}
}

这些注解在Spring和Spring Boot中有机地结合在一起,形成了一个功能丰富、易于使用的框架体系,极大地简化了Java应用的开发。

相关文章:

Spring和Spring Boot常用注解介绍及使用

Spring和Spring Boot框架通过丰富的注解集简化了Java开发,使得配置更加简洁且易于理解。 下面是一些常用的Spring和Spring Boot注解及其使用方式的简介: 目录 1. Component 2. Service 3. Repository 4. Controller 5. RestController 6. Autowire…...

【计算机毕业设计】211校园约拍微信小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…...

笨蛋学算法之LeetCodeHot100_1_两数之和(Java)

package com.lsy.leetcodehot100;public class _Hot1_两数之和 {//自写方法public static int[] twoSum1(int[] nums, int target) {//定义存放返回变量的数组int[] arr new int[2];//遍历整个数组for (int i 0; i < nums.length; i) {//从第二个数开始相加判断for (int j…...

用ip link add link命令创建vlan子设备

用ip link add link命令创建vlan子设备 ip link add link 命令用于在 Linux 系统中创建网络设备&#xff0c;其中可以用它来创建 VLAN (Virtual Local Area Network) 子接口&#xff0c;这是一个典型的用法。 VLAN是一种在二层网络&#xff08;即数据链路层&#xff09;上区分…...

AD复用布局布线

在用AD软件绘制PCB时&#xff0c;如果有多个部分布线相同&#xff0c;则可以使用复用布局布线功能&#xff0c;加快并且方便PCB的绘制。 一、创建Room 1、绘制好的电路图创建Room 2、需要拷贝的电路图创建Room 二、PCB List操作 1、PCB List内设置 2、复制绘制完的线路图 3、…...

【深度学习驱动流体力学】采集OpenFOAM仿真的流体力学数据送入到强化学习DQN模型训练

目录 技术原理1. 数据准备与环境构建2. DQN模型的设计与训练3. 训练过程中的监控与可视化训练记录参考技术原理 1. 数据准备与环境构建 首先,数据从VTK文件中读取并处理,这些文件包含流体速度场数据。通过PyVista库提取速度场信息,并将其存储在NumPy数组中。数据集随后被划…...

国内公开数据

以下是一些关于国内政府部门公布的数据或互联网上开放数据的资源&#xff0c;包括CSV、JSON和Parquet格式&#xff1a; 国内政府部门公开数据 中国政府数据开放平台 链接: 数据开放平台概要: 提供来自中国各级政府的公开数据集&#xff0c;数据格式包括CSV、JSON等。 上海市公…...

QT QByteArray 的用法

QByteArray 是 Qt 中用于处理原始字节数据的类&#xff0c;类似于标准库中的 std::vector<char> 或 std::string&#xff0c;但具有更多适合Qt框架的功能。它可以用来处理文本和二进制数据&#xff0c;并提供了一些方便的方法进行数据操作。下面是一些常见的用法示例&…...

InPixio Photo Cutter v10 解锁版安装教程 (懒人抠图工具)

前言 InPixio Photo Cutter是一款懒人抠图工具&#xff0c;采用了增强的算法切割技术&#xff0c;可以在不影响图像质量的情况下&#xff0c;允许用户从照片中删除任何物体或人物&#xff0c;并且保持其完整的质量。你只需点击几下鼠标&#xff0c;便可从照片中剪下任何细节、…...

Java17 --- SpringSecurity之OAuth2

一、OAuth2 1.1、使用github以授权码方式 1.1.1、注册应用程序 1.1.2、测试代码 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency> spring…...

服务器上线的一些事

最近不少人在上线上遇到问题 对于最近的上戏 进行一个坑或操作步骤的总结 以及遇到这些之后如何做 关于选项的选择 1 对于是否要在一个小时前释放 这个是看个人的 2 对于选择一台服务器还是两台呢&#xff1f;这个是最后限制 一台 这个免费的服务器 是有一个两百的额度的 选择…...

OceanBase-docker安装、连接数据库、修改mysql用户密码

OceanBase-docker安装、连接数据库、修改mysql用户密码 安装拉取镜像开启容器验证 连接数据库1.直接连接的方式修改数据库密码2.先进入镜像再连接数据库的方式进入镜像无密码有秘密 本人使用docker安装的oceanbase 安装 拉取镜像 docker pull oceanbase/oceanbase-ce:3.1.4 …...

浪潮(Inspur)服务器硬件监控指标解读

随着企业业务的快速发展&#xff0c;服务器的稳定运行成为保障业务连续性的关键。浪潮&#xff08;Inspur&#xff09;服务器以其卓越的性能和稳定性&#xff0c;在数据中心中扮演着重要角色。 为了确保服务器的稳定运行&#xff0c;监控易作为一款专业的IT基础设施监控软件&am…...

极简opencv操作xml文件

目标 修改xml文件&#xff0c;先产生一个临时文件&#xff0c;拷贝&#xff0c;修改&#xff0c;改名&#xff0c;使用opencv 非常简单地就可以搞定配置xml文件 code #include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/core/utils/files…...

更换域名流程记录

华为云的服务器&#xff0c;阿里云购买的域名。 1.购买域名 2.在域名服务商绑定服务器ip&#xff08;以阿里云为例&#xff09; 控制台->域名控制台->域名列表->点击域名->域名解析->添加记录 记录类型填A , 主机记录“”或“www”&#xff0c;记录值填服务器i…...

CSS 实现电影信息卡片

CSS 实现电影信息卡片 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"poster"><img src"./poster.jpg" /></div><div class"details"><img src"./avtar…...

Skype机器人

这段代码是一个Skype机器人,它使用OpenAI的GPT模型来回答与基督教相关的问题。机器人会读取最近的聊天历史,生成一个回复,并发送给用户。以下是对代码每一部分的详细解释: 导入模块 import json import http.client from skpy import SkypeEventLoop, SkypeNewMessageEve…...

海外仓系统能解决海外仓哪些难题?海外仓标准化管理实用指南

海外仓管理问题常常导致业务流程变慢&#xff0c;根据我们的调查显示&#xff0c;至少有48%的海外仓每周都会出现一些“小意外”。甚至这些小问题每天都在发生&#xff0c;问题的出现已经严重影响到了海外仓业务的进行。今天我们将重点分析海外仓比较常见的一些问题&#xff0c…...

从零开始精通Onvif之录像存储

&#x1f4a1; 如果想阅读最新的文章&#xff0c;或者有技术问题需要交流和沟通&#xff0c;可搜索并关注微信公众号“希望睿智”。 概述 Onvif的录像存储功能主要由Media、Recording和Replay三个关键服务共同支持。它们协同工作&#xff0c;为录像的存储、检索和播放提供了标准…...

vue3面试题八股集合——2024

vue3比vue2有什么优势&#xff1f; 性能更好&#xff0c;打包体积更小&#xff0c;更好的ts支持&#xff0c;更好的代码组织&#xff0c;更好的逻辑抽离&#xff0c;更多的新功能 描述Vu3生命周期 Options API的生命周期&#xff1a; beforeCreate: 在实例初始化之后、数据观…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...