详细分析Java中的@Service注解

目录

  • 1. 基本知识
  • 2. Demo
    • 2.1 传统形式
    • 2.2 注解形式
  • 3. 总结

1. 基本知识

@Service 是 Spring Framework 中的一个注解,用于标识一个类为服务层组件

服务层(Service Layer): 服务层是应用程序的一个层次结构,位于控制层(Controller Layer)和数据访问层(Data Access Layer)之间。服务层的主要责任是处理业务逻辑、协调数据访问和其他服务,并为控制器层提供数据。

对于其他层次的结构可参考如下文章:剖析Java中的Entity、service、serviceImpl、Mapper以及Controller层之间的关系(代码诠释)

作用:

  1. 标识为服务组件: 使用 @Service 注解标识的类表示它是服务层组件,即业务逻辑的实现类
  2. 依赖注入@Service 注解告诉 Spring 框架将这个类实例化为一个 Bean,并将其纳入 Spring IoC 容器中
  3. AOP 支持: 通过 @Service 注解,Spring 可以将切面(Aspect)应用于服务层组件,以实现例如事务管理、日志记录等方面的功能
  4. 基于组件扫描的自动装配: 在 Spring 应用程序中,通常使用组件扫描(Component Scanning)来自动发现标记有 @Service 注解的类,并将它们自动注册为 Spring Bean,从而简化了配置
  5. 提高代码可读性和可维护性: 使用 @Service 注解可以使代码更具有可读性,因为它清晰地标识了哪些类属于服务层,从而提高了代码的可维护性

2. Demo

一个简单的用户管理系统,其中包含用户的增加、删除和查询功能

2.1 传统形式

定义服务类: 直接定义一个服务类,实现业务逻辑

public class UserService {public void addUser(User user) {// 实现添加用户的逻辑}public void deleteUser(int userId) {// 实现删除用户的逻辑}public User getUserById(int userId) {// 实现根据用户ID查询用户的逻辑return null;}
}

使用服务: 在需要使用用户服务的地方,直接创建服务对象并调用其方法

public class UserController {private UserService userService = new UserService();// 通过用户服务添加用户public void addUser(User user) {userService.addUser(user);}// 通过用户服务删除用户public void deleteUser(int userId) {userService.deleteUser(userId);}// 通过用户服务查询用户public User getUserById(int userId) {return userService.getUserById(userId);}
}

2.2 注解形式

定义服务层接口: 定义一个服务层接口 UserService,其中包含用户管理的各种操作方法

public interface UserService {void addUser(User user);void deleteUser(int userId);User getUserById(int userId);
}

实现服务层接口:创建一个实现该接口的服务类 UserServiceImpl,并在其上添加 @Service 注解,以标识它为服务组件

import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Overridepublic void addUser(User user) {// 实现添加用户的逻辑}@Overridepublic void deleteUser(int userId) {// 实现删除用户的逻辑}@Overridepublic User getUserById(int userId) {// 实现根据用户ID查询用户的逻辑return null;}
}

使用服务: 在需要使用用户服务的地方,可以通过依赖注入的方式来引用该服务,并调用其方法

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {@Autowiredprivate UserService userService;// 通过用户服务添加用户public void addUser(User user) {userService.addUser(user);}// 通过用户服务删除用户public void deleteUser(int userId) {userService.deleteUser(userId);}// 通过用户服务查询用户public User getUserById(int userId) {return userService.getUserById(userId);}
}

3. 总结

前后逻辑对比:

  1. 使用 @Service 注解的方式
    通过注解标识了服务类,使得 Spring 能够管理它的生命周期,并且进行依赖注入
    代码更加清晰,使用了注解后可以清晰地看出哪些类是服务层组件,有利于代码的维护和阅读

  2. 传统方式
    需要手动创建服务对象,不利于解耦和依赖注入
    缺乏了自动装配、AOP 等 Spring 提供的功能

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenNJet:云原生技术中的创新者与实践者

目录 引言OpenNJet介绍OpenNJet优势1. 性能无损动态配置2. 灵活的CoPilot框架3. 支持HTTP/34. 支持国密5. 企业级应用6. 高效安全 OpenNJet 编译与安装环境准备编译环境配置配置yum源yum 安装软件包创建符号连接修改 ld.so.conf 配置 编译代码 部署 WEB SERVER配置OpenNJet部署…

深入探索JDK:Java开发工具包的奥秘

深入探索JDK:Java开发工具包的奥秘 随着信息技术的飞速发展,Java作为一种广泛使用的编程语言,在各个领域都发挥着重要作用。而JDK(Java Development Kit,Java开发工具包)作为Java编程的基础,其…

k8s的架构组成

一 k8s的概述 1.1 概述 k8s是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务,通过k8s能够进行应用的自动化部署和扩缩容。 k8s可以创建多个容器,每个容器运行一个应用实例,然后通过内置的负载均衡策略,实现…

Docker安装gitlab后连接内置pgsql修改用户信息

Docker安装gitlab后连接内置pgsql修改用户信息 进入gitlab容器 docker exec -it gitlab /bin/bash 进入postgresql su - gitlab-psql 连接pgsql psql -h /var/opt/gitlab/postgresql -d gitlabhq_production 命令行直接执行SQL语句 psql -h /var/opt/gitlab/postgresql…

HCIP-Datacom-ARST必选题库_BGP【道题】

1.关于summary automatic命令和BGP聚合的描述,错误的是? 该命令用于实现自动聚合,其优先级高于手动聚合 配置该命令后,BGP将按自然网段聚合路由 该命令用来使能对本地引入的路由进行自动聚合 配置该命令后,BGP只向对等体发送聚合后的路由 1.关于summary automatic命令和BGP聚…

Vue入门到关门之Vue3项目创建

一、vue3介绍 1、为什么要学习vue3? vue3的变化: 首先vue3完全兼容vue2,但是vue3不建议用vue2的写法;其次,vue3拥抱TypeScript,之前vue2使用的JavaScript,ts完全兼容js 最后之前学的vue2 是…

面试经典150题——找出字符串中第一个匹配项的下标

面试经典150题 day23 题目来源我的题解方法一 库函数方法二 自定义indexOf函数方法三 KMP算法 题目来源 力扣每日一题;题序:28 我的题解 方法一 库函数 直接使用indexOf函数。 时间复杂度:O(n) 空间复杂度:O(1) public int str…

(数据分析方法)长期趋势分析

目录 一、定义 二、目的 三、方法 1、移动平均法 (1)、简单移动平均法 (2)、加权移动平均法 (3)、指数平滑法 2、最小二乘法 3、线性回归 1、数据预处理 2、观察数据分布建立假设模型 3、定义损失函数 4、批量梯度下降 5、优化 4、LSTM 时序分析 5、特征工程 一…

vue3中的reactive和ref

🌏总结:reactive 适用于创建复杂的响应式对象,而 ref 则适用于创建简单的响应式值。 reactive 和 ref 是 Vue 3 Composition API 中用于创建响应式数据的两种主要方式,它们的作用如下: 响应式数据管理: rea…

OCC笔记:图形可视化的实现方式

注:文中参看的occ的源码版本为7.4.0 1、实现思路概览 整体架构 主要有3大块:AIS(Application Interactive Services ,直译为:应用程序交互服务)、Graphics(图形)、Geometry & T…

嵌入式交叉编译:Unable to find arm_neon.h

找到文件 搜索了一下,具体目录是: /opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include/arm_neon.h 解决办法 INC_ARM/opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include./configure …

Spring Security + JWT 实现登录认证和权限控制

Spring Security JWT 实现登录认证和权限控制 准备步骤 准备好一些常用的工具类,比如jwtUtil,redisUtil等。引入数据库,mybatis等,配置好controller,service,mapper,保证能够正常的数据请求。…

书籍推荐|经典书籍ic书籍REUSE METHODOLOGY MANUALFOR等和verilog网站推荐(附下载)

大家好,今天是51过后的第一个工作日,想必大家都还没有完全从节假日的吃喝玩乐模式转变为勤勤恳恳的打工人模式,当然也包括我,因此这次更新主要是分享几篇书籍和verilog相关的学习网站~ 首先是一本数字电路相关的基础书籍&#xf…

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

ld.exe: unrecognized option ‘--major-image-version‘

问题:在windows环境使用cmakemingw32gcc交叉工具链报错 原因:将project指令放到了set(CMAKE_SYSTEM_NAME Linux)之前 下面为CMakeLists.txt正确写法: cmake_minimum_required(VERSION 3.0)#set(CMAKE_C_COMPILER_WORKS 1)#set(CMAKE_CXX_C…

性能超越!新模型Dragoman打造高质量英译乌翻译系统,打败现有SOTA模型

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索乌克兰语的机器翻译挑战 在当今全球化迅速发展的背景下,机器翻译技术已成为沟通世界各地文化和语言的重要桥梁。尽管如此&…

PMO全面指南:一文读懂PMO的功能、职责、类型、构建

多年来,PMO 的概念在多个行业和类型的组织中越来越受欢迎。一开始,只有大型跨国公司才熟悉它,但后来,许多中小型公司开始采用 PMO 来进行高效的项目管理并实现其战略目标。 根据Statista的数据,目前有80%的组织设有至…

【C++基础】构造函数

一,构造函数概念 概念:函数名与类名相同,且没有返回值类型,这就是构造函数,它承担着类初始化的工作。 构造函数虽然名叫构造,但它并不是开空间创建对象,而是初始化对象。 分类:默…

OpenHarmony实战开发-管理位置权限

Web组件提供位置权限管理能力。开发者可以通过onGeolocationShow()接口对某个网站进行位置权限管理。Web组件根据接口响应结果,决定是否赋予前端页面权限。获取设备位置,需要开发者配置ohos.permission.LOCATION,ohos.permission.APPROXIMATE…

基于Springboot的家具网站

基于SpringbootVue的家具网站设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商家 家具信息 家居资讯 后台管理 后台首页 用户管理 商家管理 家具类型管理 家具…