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应用的开发。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Spring和Spring Boot常用注解介绍及使用
Spring和Spring Boot框架通过丰富的注解集简化了Java开发,使得配置更加简洁且易于理解。 下面是一些常用的Spring和Spring Boot注解及其使用方式的简介: 目录 1. Component 2. Service 3. Repository 4. Controller 5. RestController 6. Autowire…...
![](https://img-blog.csdnimg.cn/direct/4394efd67dc3419fbe63509414a37da1.png)
【计算机毕业设计】211校园约拍微信小程序
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
![](https://img-blog.csdnimg.cn/direct/d00e1f02ecbc4e669fee5b8ba7718aa8.png)
笨蛋学算法之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…...
![](https://www.ngui.cc/images/no-images.jpg)
用ip link add link命令创建vlan子设备
用ip link add link命令创建vlan子设备 ip link add link 命令用于在 Linux 系统中创建网络设备,其中可以用它来创建 VLAN (Virtual Local Area Network) 子接口,这是一个典型的用法。 VLAN是一种在二层网络(即数据链路层)上区分…...
![](https://img-blog.csdnimg.cn/direct/c335749d51c64be18ed8d5cc83598f4f.png)
AD复用布局布线
在用AD软件绘制PCB时,如果有多个部分布线相同,则可以使用复用布局布线功能,加快并且方便PCB的绘制。 一、创建Room 1、绘制好的电路图创建Room 2、需要拷贝的电路图创建Room 二、PCB List操作 1、PCB List内设置 2、复制绘制完的线路图 3、…...
![](https://img-blog.csdnimg.cn/direct/e4430248a4e14eb49b474e606fb7a32d.png)
【深度学习驱动流体力学】采集OpenFOAM仿真的流体力学数据送入到强化学习DQN模型训练
目录 技术原理1. 数据准备与环境构建2. DQN模型的设计与训练3. 训练过程中的监控与可视化训练记录参考技术原理 1. 数据准备与环境构建 首先,数据从VTK文件中读取并处理,这些文件包含流体速度场数据。通过PyVista库提取速度场信息,并将其存储在NumPy数组中。数据集随后被划…...
![](https://www.ngui.cc/images/no-images.jpg)
国内公开数据
以下是一些关于国内政府部门公布的数据或互联网上开放数据的资源,包括CSV、JSON和Parquet格式: 国内政府部门公开数据 中国政府数据开放平台 链接: 数据开放平台概要: 提供来自中国各级政府的公开数据集,数据格式包括CSV、JSON等。 上海市公…...
![](https://www.ngui.cc/images/no-images.jpg)
QT QByteArray 的用法
QByteArray 是 Qt 中用于处理原始字节数据的类,类似于标准库中的 std::vector<char> 或 std::string,但具有更多适合Qt框架的功能。它可以用来处理文本和二进制数据,并提供了一些方便的方法进行数据操作。下面是一些常见的用法示例&…...
![](https://img-blog.csdnimg.cn/direct/a81c3a91681741d7907ab1acc1f5d900.png)
InPixio Photo Cutter v10 解锁版安装教程 (懒人抠图工具)
前言 InPixio Photo Cutter是一款懒人抠图工具,采用了增强的算法切割技术,可以在不影响图像质量的情况下,允许用户从照片中删除任何物体或人物,并且保持其完整的质量。你只需点击几下鼠标,便可从照片中剪下任何细节、…...
![](https://img-blog.csdnimg.cn/direct/ae532e0b682c4537a72ff1ed781481b6.jpeg)
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…...
![](https://www.ngui.cc/images/no-images.jpg)
服务器上线的一些事
最近不少人在上线上遇到问题 对于最近的上戏 进行一个坑或操作步骤的总结 以及遇到这些之后如何做 关于选项的选择 1 对于是否要在一个小时前释放 这个是看个人的 2 对于选择一台服务器还是两台呢?这个是最后限制 一台 这个免费的服务器 是有一个两百的额度的 选择…...
![](https://www.ngui.cc/images/no-images.jpg)
OceanBase-docker安装、连接数据库、修改mysql用户密码
OceanBase-docker安装、连接数据库、修改mysql用户密码 安装拉取镜像开启容器验证 连接数据库1.直接连接的方式修改数据库密码2.先进入镜像再连接数据库的方式进入镜像无密码有秘密 本人使用docker安装的oceanbase 安装 拉取镜像 docker pull oceanbase/oceanbase-ce:3.1.4 …...
![](https://www.ngui.cc/images/no-images.jpg)
浪潮(Inspur)服务器硬件监控指标解读
随着企业业务的快速发展,服务器的稳定运行成为保障业务连续性的关键。浪潮(Inspur)服务器以其卓越的性能和稳定性,在数据中心中扮演着重要角色。 为了确保服务器的稳定运行,监控易作为一款专业的IT基础设施监控软件&am…...
![](https://www.ngui.cc/images/no-images.jpg)
极简opencv操作xml文件
目标 修改xml文件,先产生一个临时文件,拷贝,修改,改名,使用opencv 非常简单地就可以搞定配置xml文件 code #include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/core/utils/files…...
![](https://img-blog.csdnimg.cn/direct/013333b621714c9498d48d18faa2b01b.png)
更换域名流程记录
华为云的服务器,阿里云购买的域名。 1.购买域名 2.在域名服务商绑定服务器ip(以阿里云为例) 控制台->域名控制台->域名列表->点击域名->域名解析->添加记录 记录类型填A , 主机记录“”或“www”,记录值填服务器i…...
![](https://img-blog.csdnimg.cn/direct/9f2d4f8865d441d6ad50fb3d51cc773f.jpeg#pic_center)
CSS 实现电影信息卡片
CSS 实现电影信息卡片 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"poster"><img src"./poster.jpg" /></div><div class"details"><img src"./avtar…...
![](https://www.ngui.cc/images/no-images.jpg)
Skype机器人
这段代码是一个Skype机器人,它使用OpenAI的GPT模型来回答与基督教相关的问题。机器人会读取最近的聊天历史,生成一个回复,并发送给用户。以下是对代码每一部分的详细解释: 导入模块 import json import http.client from skpy import SkypeEventLoop, SkypeNewMessageEve…...
![](https://img-blog.csdnimg.cn/direct/5d926ee983664809a08e796a8d534bbb.png)
海外仓系统能解决海外仓哪些难题?海外仓标准化管理实用指南
海外仓管理问题常常导致业务流程变慢,根据我们的调查显示,至少有48%的海外仓每周都会出现一些“小意外”。甚至这些小问题每天都在发生,问题的出现已经严重影响到了海外仓业务的进行。今天我们将重点分析海外仓比较常见的一些问题,…...
![](https://www.ngui.cc/images/no-images.jpg)
从零开始精通Onvif之录像存储
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 概述 Onvif的录像存储功能主要由Media、Recording和Replay三个关键服务共同支持。它们协同工作,为录像的存储、检索和播放提供了标准…...
![](https://img-blog.csdnimg.cn/img_convert/1977aeb5288e2aa8ddb2b9b54f47a4da.webp?x-oss-process=image/format,png)
vue3面试题八股集合——2024
vue3比vue2有什么优势? 性能更好,打包体积更小,更好的ts支持,更好的代码组织,更好的逻辑抽离,更多的新功能 描述Vu3生命周期 Options API的生命周期: beforeCreate: 在实例初始化之后、数据观…...
![](https://img-blog.csdnimg.cn/direct/b9e4c4d01492459697a21c86d304a8bf.png)
第2章 Rust初体验5/8:match表达式和模式匹配:更富表达力:猜骰子冷热游戏
讲动人的故事,写懂人的代码 2.5 故事3: 比较答案与点数之和 贾克强:“同学们,我们开始用三种语言来实现故事3吧!” 2.5.1 Rust版故事3 这个故事实在是轻松容易地实现了。赵可菲照着书,一下子就写好了。 @@ -1,4 +1,5 @@use rand::Rng; +use std::cmp::Ordering;use std…...
![](https://img-blog.csdnimg.cn/direct/5462c8292a6847b0ad235f61fde2a88c.png)
1台UG图形工作站实现5-7人共享使用
随着计算机辅助设计(CAD)和计算机辅助制造(CAM)技术的不断发展,UG图形工作站已成为许多行业不可或缺的重要工具。 对于许多中小型企业而言,购买多台高性能的UG图形工作站无疑是一笔巨大的开销,…...
![](https://www.ngui.cc/images/no-images.jpg)
Dubbo 3.x源码(22)—Dubbo服务引用源码(5)服务引用bean的获取以及懒加载原理
基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的服务引入的总体流程,当然真正的服务远程引入、以及配置迁移啥的都还没讲,但是本次我们先不接着讲MigrationRuleListener#onRefer方法,而是先…...
![](https://img-blog.csdnimg.cn/direct/31dd8224ab2245489ce6fa19308420fe.png)
nodejs——原型链污染
一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象的概念,所以我们要先明确一点: JavaScript中一切引用类型都是对象,对象就是属性的集合。 Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。 也就…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
忘记 iPhone 密码:如果忘记密码,如何解锁 iPhone
为了提高个人数据的安全性,用户通常会为不同的帐户和设备创建不同的复杂密码。虽然较新的 iPhone 型号具有生物识别和面部解锁功能,但这些功能并不总是有效 - 如果您忘记了 iPhone 的密码,您可能会遇到麻烦。 iPhone 用户和 Android 用户一样…...
![](https://img-blog.csdnimg.cn/direct/cac9e007a086467d95ce45aea72eb7db.png)
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 Cacheable 是 Spring Framework 提供的一个注解,用于在方法执行前先检查缓存,如果缓存中已存在对应的值,则直接返回缓存中的值,而不执行该方法体。如果缓存中不存在对应的值,则执行方法体,并将方法的…...
![](https://img-blog.csdnimg.cn/img_convert/424e9927f3521ca8202153aef056964e.png)
第四届人工智能、机器人和通信国际会议(ICAIRC 2024)
第四届人工智能、机器人和通信国际会议(ICAIRC 2024) 2024 4th International Conference on Artificial Intelligence, Robotics, and Communication 2024年12月27-29日 | 中国厦门 重要信息 会议官网:www.icairc.net 录用通知时间&…...
![](https://img-blog.csdnimg.cn/direct/036b57508ca043929e053928450b74f8.png#pic_center)
ctr/cvr预估之FM模型
ctr/cvr预估之FM模型 在数字化时代,广告和推荐系统的质量直接影响着企业的营销成效和用户体验。点击率(CTR)和转化率(CVR)预估作为这些系统的核心组件,其准确性至关重要。传统的机器学习方法,如…...
![](https://www.ngui.cc/images/no-images.jpg)
HAL-DMA中断空闲接受不定长数据
title: HAL-DMA中断空闲接受不定长数据 tags: STM32HalCubemax 面对无规律长度的数据帧如何处理? 不定长数据接收可以使用每帧数据发送完成后会有一定的空闲时间"帧的时间间隔?" 如果你想每帧都要可以采用dma加空闲中断的方式空闲中断一次就是一帧数据…...
![](https://img-blog.csdnimg.cn/direct/2f9b5ef520774023ba3f873a51694861.png)
【会议征稿,CPS出版】第四届管理科学和软件工程国际学术会议(ICMSSE 2024,7月19-21)
第四届管理科学和软件工程国际学术会议(ICMSSE 2024)由ACM珠海分会,广州番禺职业技术学院主办;全国区块链行业产教融合共同体,AEIC学术交流中心承办,将于2024年7月19-21日于广州召开。 会议旨在为从事管理与软件工程领域的专家学…...
![](/images/no-images.jpg)
有了域名 怎么做网站/抖音关键词优化排名
java中String是对象类型,不能使用""比较。正确的用法如下: if(A.equals(B)){//相等 }...
![](https://img-blog.csdnimg.cn/img_convert/7050f1d5a48dd04a6118636856e6911a.png)
网站带支付源码/网站优化排名方法
你好,【程序职场】专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余一起聊聊职场规划,个人成长,还能带你一起探索 副业赚钱渠道,在提升技术的同时我们一起交流 敏捷流程 提高工作效率&#…...
![](/images/no-images.jpg)
房地产企业网站开发/广告设计与制作需要学什么
Let’s code to identify your emotions.Coding识别你的喜怒哀乐。---《python情绪识别》.BY AndyEmotions.png一、原图二、情绪识别结果三、代码实现filename:faceEmotions_image.pyimport dlib #人脸识别的库dlibimport numpy as np #数据处理的库numpyimport cv2 #图像处理的…...
海南行指网站开发公司/百度怎么推广自己的信息
现有Doc-word矩阵,采用余弦计算两两文档之间的相似度。在实际问题中,矩阵通常是很稀疏的,为了减少计算量,通常采用倒排索引的 数据结构 [1], 将包含相同word的doc映射到同一个节点上, 这样只需计算相似度不为0的文档之…...
![](https://img2018.cnblogs.com/blog/1451441/201809/1451441-20180927154959034-227713246.png)
wordpress ifanr主题/上海城市分站seo
事件的三要素: 事件源、事件、事件驱动程序。 事件源.: 引发后续事件的html标签 document.getElementById(“box”) document.getElementsByClassName() document.getElementsByTagName() 事件: js已经定义好了 事件驱动程序: 对样式和html进行操作 事件源.οn…...
![](http://upload-images.jianshu.io/upload_images/7849276-5f48f1430e958383.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
成都网站开发建设推广/专业推广引流团队
转载请注明原创出处,谢谢! 经过 4 次跳票,历经曲折的 Java 9 正式版终于发布了!今天看着到处都是jdk9发布了,新特性说明,心想这么好的蹭热度计划能错过嘛,哈哈,所以就发了这篇文章。…...