当前位置:首页 » 《随便一记》 » 正文

详细分析Java中的@Service注解

9 人参与  2024年09月22日 16:40  分类 : 《随便一记》  评论

点击全文阅读


目录

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

1. 基本知识

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

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

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

作用:

标识为服务组件: 使用 @Service 注解标识的类表示它是服务层组件,即业务逻辑的实现类依赖注入@Service 注解告诉 Spring 框架将这个类实例化为一个 Bean,并将其纳入 Spring IoC 容器中AOP 支持: 通过 @Service 注解,Spring 可以将切面(Aspect)应用于服务层组件,以实现例如事务管理、日志记录等方面的功能基于组件扫描的自动装配: 在 Spring 应用程序中,通常使用组件扫描(Component Scanning)来自动发现标记有 @Service 注解的类,并将它们自动注册为 Spring Bean,从而简化了配置提高代码可读性和可维护性: 使用 @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;@Servicepublic class UserServiceImpl implements UserService {    @Override    public void addUser(User user) {        // 实现添加用户的逻辑    }    @Override    public void deleteUser(int userId) {        // 实现删除用户的逻辑    }    @Override    public User getUserById(int userId) {        // 实现根据用户ID查询用户的逻辑        return null;    }}

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

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;@Controllerpublic class UserController {    @Autowired    private 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. 总结

前后逻辑对比:

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

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/163150.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 被绝色小姨子陷害,我快顶不住了章节目录_陈精苏若熙无法释怀_小说后续在线阅读_无删减免费完结_
  • 家宴过后,我捉奸了庶妹和我老公无广告_庶妹老公侍卫TOP10_小说后续在线阅读_无删减免费完结_
  • 寝室六个人,她们背着我建五人群必读文_太天真申请书冷笑最新阅读_小说后续在线阅读_无删减免费完结_
  • 开局获得狐仙传承结局+番外_江帆赵雪隐藏剧情_小说后续在线阅读_无删减免费完结_
  • 刀锈春根生,白骨犹温完结全文_卫舟棠棠知意一口气完结_小说后续在线阅读_无删减免费完结_
  • 夫君立筷子定我灾星罪名,我改嫁冷宫皇子后他追悔莫及好评_赵荀孟如安青瑶精心编著_小说后续在线阅读_无删减免费完结_
  • 邻居低素质,而我没素质独家番外_老太太赖皮欣欣超长版_小说后续在线阅读_无删减免费完结_
  • 重生后我转嫁首富瘸腿独子,总裁前夫却疯了一口气看完_妹妹傅云琛沈明辉独家番外_小说后续在线阅读_无删减免费完结_
  • 我拒绝给系花捐款后,全系同学悔疯了在线阅读_小说后续在线阅读_无删减免费完结_
  • 我让位给女友的透视眼竹马,他却说如果能重生再也不来了。虐心反转_玉石林若女友推荐_小说后续在线阅读_无删减免费完结_
  • 相国独子的丫鬟砸坏我的玉佩后,我当场拒婚阅读_玉佩陈郡谢氏全新_小说后续在线阅读_无删减免费完结_
  • 手术时,我看着病人惨死最新试读_淼淼陆知衍姜颜全本完结_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1