深入剖析 Spring 常用注解:功能与差异的全景洞察
《深入剖析 Spring 常用注解:功能与差异的全景洞察》
在当今的 Java 开发领域,Spring 框架无疑是最广泛使用的框架之一。而在 Spring 中,注解的运用极大地简化了开发流程,提高了代码的可读性和可维护性。本文将深入探讨 Spring 中一些常用的注解,并详细阐述它们之间的区别,通过实际的例子帮助您更好地理解和运用。
一、组件相关注解
1. @Component
@Component 是一个基础且通用的组件注解,用于标识一个普通的 Spring Bean 组件。当 Spring 容器在扫描组件时,会将被 @Component 标注的类实例化为一个 Bean,并纳入 Spring 的管理范围。
例:
@Component
public class CommonComponent {public void commonMethod() {System.out.println("这是一个通用组件的方法");}
}
2. @Service
@Service 注解通常用于标注业务逻辑层的组件,其本质上也是 @Component 的一种特殊形式,用于更明确地强调该类是一个提供业务服务的类。
例:
@Service
public class UserService {public User getUserById(Long id) {// 从数据库或其他数据源获取用户信息return new User();}
}
3. @Repository
@Repository 注解主要用于标注数据访问层(DAO)的组件,例如与数据库进行交互的类。它的使用有助于区分数据访问相关的逻辑。
例:
@Repository
public class UserRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;public User findUserById(Long id) {String sql = "SELECT * FROM users WHERE id =?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) -> {User user = new User();user.setId(rs.getLong("id"));user.setName(rs.getString("name"));return user;});}
}
4. @Controller
@Controller 注解用于标注控制层的组件,主要处理用户的请求并返回相应的响应。
例:
@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/user")public ModelAndView getUser() {User user = userService.getUserById(1L);ModelAndView modelAndView = new ModelAndView("user");modelAndView.addObject("user", user);return modelAndView;}
}
二、依赖注入相关注解
1. @Autowired
@Autowired 注解用于按照类型自动装配依赖的对象。Spring 容器会根据类型在容器中查找匹配的 Bean 并进行注入。
例:
@Service
public class OrderService {@Autowiredprivate OrderRepository orderRepository;public void createOrder(Order order) {orderRepository.save(order);}
}
2. @Resource
@Resource 注解也用于依赖注入,它既可以通过名称也可以通过类型来查找要注入的 Bean。
例:
@Service
public class UserService {@Resource(name = "userRepository")private UserRepository userRepository;public void updateUser(User user) {userRepository.update(user);}
}
三、配置相关注解
1. @Configuration
@Configuration 注解用于标识一个类是配置类,Spring 会将该类中的配置信息进行处理和应用。
例:
@Configuration
public class AppConfig {@Beanpublic DataSource dataSource() {// 配置数据源return new DriverManagerDataSource();}
}
2. @Bean
@Bean 注解在配置类中用于定义一个 Bean,通过方法的返回值来创建和配置 Bean。
例:
@Configuration
public class AppConfig {@Beanpublic UserService userService() {return new UserServiceImpl();}
}
四、切面编程(AOP)相关注解
1. @Aspect
@Aspect 注解用于标识一个类是切面类,该类中可以定义各种切面逻辑。
例:
@Aspect
public class LoggingAspect {// 切面逻辑
}
2. @Before
@Before 注解用于定义在目标方法执行前执行的切面逻辑。
例:
@Before("execution(* com.example.service.*.*(..))")
public void beforeMethod(JoinPoint joinPoint) {System.out.println("在方法执行前:" + joinPoint.getSignature().getName());
}
3. @After
@After 注解用于定义在目标方法执行后执行的切面逻辑。
例:
@After("execution(* com.example.service.*.*(..))")
public void afterMethod(JoinPoint joinPoint) {System.out.println("在方法执行后:" + joinPoint.getSignature().getName());
}
4. @Around
@Around 注解用于定义环绕目标方法执行的切面逻辑,可以灵活地控制目标方法的执行过程。
例:
@Around("execution(* com.example.service.*.*(..))")
public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("环绕前");Object result = joinPoint.proceed();System.out.println("环绕后");return result;
}
五、事务管理相关注解
1. @Transactional
@Transactional 注解用于标识一个方法是事务性的,确保方法内的数据库操作要么全部成功提交,要么全部回滚。
例:
@Service
public class UserServiceImpl implements UserService {@Transactionalpublic void updateUser(User user) {// 更新用户信息// 如果在此过程中出现异常,事务将自动回滚}
}
六、相似注解的区别
!!!相似注解的区别**:
@Autowired和@Resource:@Autowired主要按照类型进行自动装配,如果存在多个相同类型的 bean ,需要结合@Qualifier按名称指定。@Resource可以按名称或类型装配,若同时指定名称和类型,则优先按名称查找。
@Component、@Controller、@Service、@Repository:- 功能上都是标识组件以便被 Spring 管理,但在分层架构中用于区分不同的层次,具有语义上的差异。
相关文章:
深入剖析 Spring 常用注解:功能与差异的全景洞察
《深入剖析 Spring 常用注解:功能与差异的全景洞察》 在当今的 Java 开发领域,Spring 框架无疑是最广泛使用的框架之一。而在 Spring 中,注解的运用极大地简化了开发流程,提高了代码的可读性和可维护性。本文将深入探讨 Spring 中…...
【隐私计算篇】隐私计算使用不当也会泄露原始数据
1. 背景信息 有个有趣的问题,刚好最近有讨论到,在这里也抛一下,就是隐私计算中我们经常谈到主流的一些技术,比如联邦学习、多方安全计算、安全求交、匿踪查询、可信执行环境等,然后笼统地会称这些技术实现了对隐私…...
C++第一讲:开篇
C第一讲:开篇 1.C历史背景1.1C创世主--本贾尼1.2C版本更新1.3C的重要性1.4C书籍推荐 2.C的第一个程序3.命名空间3.1namespace是什么3.2namespace的使用3.3namespace使用注意事项3.4命名空间的使用 4.C输入和输出5.缺省参数6.函数重载7.引用7.1什么是引用7.2引用的定…...
OceanBase V4.2特性解析:MySQL模式下GIS空间表达式的场景及能力解析
1. 背景 1.1. OceanBase Mysql gis空间表达式的应用场景及能力 在OceanBase 4.1版本中,mysql模式下支持了gis数据类型以及部分空间对象相关的表达式,随着客户使用空间数据的需求日益增长,需要快速地补齐空间数据存储和计算分析的能力&#…...
HSL模型和HSB模型,和懒人配色的Color Hunt
色彩不仅仅是视觉上的享受,它在数据可视化中也扮演着关键角色。通过合理运用色彩模型,我们可以使数据更具可读性和解释性。在这篇文章将探讨HSL(Hue, Saturation, Lightness)和HSB(Hue, Saturation, Brightness&#x…...
什么是云原生?(二)
1. 云原生的定义 云原生指构建和运行应用以充分利用通过云技术交付模式交付的分布式计算。云原生应用旨在充分利用云技术平台特有的可扩展性、弹性和灵活性优势。 根据云原生计算基金会 (CNCF) 的定义,云原生技术可帮助企业在公有云、私有云和混合云环境中构建和…...
pytorch 47 模型剪枝实战|基于torch-pruning库代码对yolov10n模型进行剪枝
torch-pruning官方提供了基于yolov8的剪枝代码,基于此代码改进博主实现了对yolov10n模型的剪枝。虽然实现了对yolov10n模型的剪枝,剪枝目标为移除60%的通道,然而实验是失败的,针对coco数据集进行操作,剪枝前的模型map时37,剪枝后只能恢复到22,比预计下降了15个点,剪枝后…...
LeetCode_sql_day15(262.行程与用户)
描述:262. 行程和用户 - 力扣(LeetCode) 取消率 的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。 编写解决方案找出 "2013-10-01" 至 "2013-10-03" 期间非禁止…...
【MySQL】详解数据库约束、聚合查询和联合查询
数据库约束 约束类型 数据库的约束类型主要包括以下几种: 主键约束(Primary Key Constraint):确保表中的每一行都有唯一的标识,且不能为NULL。 外键约束(Foreign Key Constraint):…...
bug积累
1.只写 int p[len1 len2]; 时,实际上是在使用 C99 标准中引入的变长数组(VLA, Variable Length Array)的特性。变长数组允许在栈上分配其大小在运行时确定的数组。这意味着 len1 和 len2 的值可以在程序运行时确定,但仍然可以用来…...
版本控制案例:全球虚拟制片领导者Dimension借助Perforce Helix Core简化多供应商协作,控制访问权限,确保数据资产安全(下)
创建虚拟世界和人物角色需要一系列的软件工具。但最终愿景很少是由单一工作室独立完成的。对于大型项目,工作室需要通力合作,将全球的团队成员和数字资产联合起来。 Dimension Studio——体积内容捕捉和虚拟制片领域的领导者——不断将新技术和新方法融…...
Anaconda配置envs和pcks路径
问题 原先Anaconda安装在C盘,安装很多包后只剩几个G了,为了给C盘腾空间,卸载后重新安装在了D盘,但是创建了新环境后发现环境位置依旧在C盘,安装新的包仍然会占用C盘空间。 解决办法 查看conda的配置信息 执行如下命…...
推荐10个在线搭建框架平台
前言 在开发项目的时候,首先就是要搭建一个框架。这个框架可以是纯技术框架,也可以具备一定功能的开源框架。但是在搭建框架的时候,版本的冲突,环境的配置等是新手们一直头痛的问题,在构建开源框架的时候,…...
Linux Shell--函数
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、简介 Shell 函数是一段可以重复使用的代码块,通过定义函数可以避免代码重复,提高脚本的可读性和可维护性。 二、定义函数…...
漏洞复现-CVE-2023-42442:JumpServer未授权访问漏洞
概述 JumpServer存在一个未授权访问漏洞。具体来说,/api/v1/terminal/sessions/ API端点的权限控制存在逻辑错误,允许攻击者匿名访问。未经身份验证的远程攻击者可以利用此漏洞下载SSH日志,并可能借此远程窃取敏感信息。值得注意的是&#x…...
【数据结构之带头双向循环链表的实现】
1.链表的分类 链表的结构有多种多样,以下情况组合起来就有8种(2x2x2)链表结构: 虽然有这么多的链表结构,但是我们实际中最常用的还是两种结构:单链表和双向带头循环链表。 无头单向非循环链表:结…...
【docker】docker数据卷与网络部署服务
Docker 网络模式 选择网络模式 Host Mode (主机模式) 特点: 容器与宿主机共享网络命名空间操作: docker run --nethost ... Container Mode (容器模式) 特点: 容器与指定容器共享网络命名空间操作: docker run --netcontainer:<container-id-or-name> ... None Mode (无…...
Spring MVC框架学习笔记
学习视频:10001 Spring MVC概述_哔哩哔哩_bilibili~11005 请求映射方式_哔哩哔哩_bilibili 目录 1.概述 Java EE三层架构 Spring MVC在三层架构中的位置 编辑 Spring MVC在表现层的作用 Spring MVC的特点 2.Spring MVC入门程序 代码实现 Spring MVC工作原理 Spring …...
LeetCode 100道题目和答案(面试必备)(一)
1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按…...
OpenGL投影矩阵
OpenGL Projection Matrix OpenGL投影矩阵...
免费AI创作+零跳转!影刀6.0在百家号当前页全自动发文
免费AI创作零跳转!影刀6.0在百家号当前页全自动发文百家号创作者的福音来啦🥳人已经坐在百家号创作页面里了不用自己费脑想标题、写正文,影刀RPA直接调用免费AI大模型,一键搞定爆款创作不用切页、不用手动输入,AI自动贴…...
拿火吉他温湿度管控专项保养与环境适配指南
温湿度是影响吉他使用寿命与结构稳定性的核心因素,即便拿火吉他采用了 AirSonic 碳纤维一体琴体,大幅降低了环境对琴体的影响,但吉他的指板、琴颈、琴桥等木质部件,依然会对温湿度变化极为敏感,极端温湿度环境会导致琴…...
HunyuanVideo-Foley效果展示:钢琴独奏音效+琴房光影视频生成高清集锦
HunyuanVideo-Foley效果展示:钢琴独奏音效琴房光影视频生成高清集锦 1. 惊艳视听效果预览 HunyuanVideo-Foley模型在音乐场景的表现令人惊叹。当输入"钢琴独奏音乐会"这一简单描述时,模型能够同时生成高清视频和匹配的钢琴音效,创…...
Phi-3-mini-4k-instruct-gguf GPU算力优化:q4 GGUF模型在消费级显卡上的表现
Phi-3-mini-4k-instruct-gguf GPU算力优化:q4 GGUF模型在消费级显卡上的表现 1. 模型概述 Phi-3-mini-4k-instruct-gguf 是微软Phi-3系列中的轻量级文本生成模型GGUF版本,专为问答、文本改写、摘要整理和简短创作等场景优化。这个经过量化的q4 GGUF模型…...
浏览器超能力开发指南:解锁Greasy Fork用户脚本的实战手册
浏览器超能力开发指南:解锁Greasy Fork用户脚本的实战手册 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 在数字化工作流中,我们每天都在重复着大量机械操作——手…...
音乐格式自由革命:NCMDump终极指南让你轻松解锁网易云加密音乐
音乐格式自由革命:NCMDump终极指南让你轻松解锁网易云加密音乐 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲只能在特定客户端播放而烦恼吗?你是否曾经因为NCM格式的限制而无法在…...
PP-DocLayoutV3开发者案例:对接LangChain文档加载器,输出标准Unstructured格式
PP-DocLayoutV3开发者案例:对接LangChain文档加载器,输出标准Unstructured格式 1. 项目背景与需求 在实际的文档处理流程中,我们经常需要将各种格式的文档(PDF、图片、扫描件等)转换为结构化的数据,以便后…...
《jEasyUI 格式化列》
《jEasyUI 格式化列》 引言 jEasyUI 是一款流行的开源jQuery UI库,旨在简化Web用户界面(UI)的开发。在jEasyUI中,格式化列是一种常见且强大的功能,它允许开发者根据需要自定义表格列的显示格式。本文将详细介绍jEasyUI…...
AnalogTouch:面向车载系统的电阻屏触摸驱动库
1. AnalogTouch 库概述AnalogTouch 是面向 CARIAD 平台设计的模拟电阻式触摸屏(Resistive Touch Panel, RTP)驱动库,专为嵌入式车载显示系统优化。其核心目标并非通用触摸抽象层,而是深度适配 CARIAD 架构下 TFT/LCD 显示子系统的…...
终极热键冲突检测指南:3分钟定位Windows快捷键失效元凶
终极热键冲突检测指南:3分钟定位Windows快捷键失效元凶 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾…...
