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文件,帮助大学选题。赠送开题报告模板ÿ…...

笨蛋学算法之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 系统中创建网络设备,其中可以用它来创建 VLAN (Virtual Local Area Network) 子接口,这是一个典型的用法。 VLAN是一种在二层网络(即数据链路层)上区分…...

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

【深度学习驱动流体力学】采集OpenFOAM仿真的流体力学数据送入到强化学习DQN模型训练
目录 技术原理1. 数据准备与环境构建2. DQN模型的设计与训练3. 训练过程中的监控与可视化训练记录参考技术原理 1. 数据准备与环境构建 首先,数据从VTK文件中读取并处理,这些文件包含流体速度场数据。通过PyVista库提取速度场信息,并将其存储在NumPy数组中。数据集随后被划…...
国内公开数据
以下是一些关于国内政府部门公布的数据或互联网上开放数据的资源,包括CSV、JSON和Parquet格式: 国内政府部门公开数据 中国政府数据开放平台 链接: 数据开放平台概要: 提供来自中国各级政府的公开数据集,数据格式包括CSV、JSON等。 上海市公…...
QT QByteArray 的用法
QByteArray 是 Qt 中用于处理原始字节数据的类,类似于标准库中的 std::vector<char> 或 std::string,但具有更多适合Qt框架的功能。它可以用来处理文本和二进制数据,并提供了一些方便的方法进行数据操作。下面是一些常见的用法示例&…...

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

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 对于选择一台服务器还是两台呢?这个是最后限制 一台 这个免费的服务器 是有一个两百的额度的 选择…...
OceanBase-docker安装、连接数据库、修改mysql用户密码
OceanBase-docker安装、连接数据库、修改mysql用户密码 安装拉取镜像开启容器验证 连接数据库1.直接连接的方式修改数据库密码2.先进入镜像再连接数据库的方式进入镜像无密码有秘密 本人使用docker安装的oceanbase 安装 拉取镜像 docker pull oceanbase/oceanbase-ce:3.1.4 …...
浪潮(Inspur)服务器硬件监控指标解读
随着企业业务的快速发展,服务器的稳定运行成为保障业务连续性的关键。浪潮(Inspur)服务器以其卓越的性能和稳定性,在数据中心中扮演着重要角色。 为了确保服务器的稳定运行,监控易作为一款专业的IT基础设施监控软件&am…...
极简opencv操作xml文件
目标 修改xml文件,先产生一个临时文件,拷贝,修改,改名,使用opencv 非常简单地就可以搞定配置xml文件 code #include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/core/utils/files…...

更换域名流程记录
华为云的服务器,阿里云购买的域名。 1.购买域名 2.在域名服务商绑定服务器ip(以阿里云为例) 控制台->域名控制台->域名列表->点击域名->域名解析->添加记录 记录类型填A , 主机记录“”或“www”,记录值填服务器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…...

海外仓系统能解决海外仓哪些难题?海外仓标准化管理实用指南
海外仓管理问题常常导致业务流程变慢,根据我们的调查显示,至少有48%的海外仓每周都会出现一些“小意外”。甚至这些小问题每天都在发生,问题的出现已经严重影响到了海外仓业务的进行。今天我们将重点分析海外仓比较常见的一些问题,…...
从零开始精通Onvif之录像存储
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 概述 Onvif的录像存储功能主要由Media、Recording和Replay三个关键服务共同支持。它们协同工作,为录像的存储、检索和播放提供了标准…...

vue3面试题八股集合——2024
vue3比vue2有什么优势? 性能更好,打包体积更小,更好的ts支持,更好的代码组织,更好的逻辑抽离,更多的新功能 描述Vu3生命周期 Options API的生命周期: beforeCreate: 在实例初始化之后、数据观…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...