Spring注解之Service用法及示例详解

 更新时间:2024年04月02日 16:55:22   作者:IFSB PRO Chu  
使用 @Service 注解可以将一个类声明为业务逻辑组件,并将其对象存入 Spring 容器中,在控制器类中,通过注入该组件的实例,即可调用其中的方法,这篇文章主要介绍了Spring注解之Service用法及示例详解,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

Service注解

@Service 注解是 Spring Framework 中的一种注解,它标识了这个类是一个业务逻辑层的服务 Bean。这意味着当 Spring 应用启动时,该 Bean 会被自动创建并加入到 Spring 应用上下文中。
简而言之,@Service 注解是一种用于标记服务层 Bean 的注解,是在 Spring Boot 应用中实现业务逻辑复用的重要方法之一。

Service用法及示例

使用 @Service 注解可以将一个类声明为业务逻辑组件,并将其对象存入 Spring 容器中。在控制器类中,通过注入该组件的实例,即可调用其中的方法。
以下是一个关于订单服务的代码示例,该示例说明了如何使用 @Service 注解。
首先,我们定义了一个订单服务接口,该接口包含两个方法:一个创建订单,一个查询订单详情。

public interface OrderService {
    Order createOrder(Order order);
    Order getOrderDetails(String orderId);
}

接下来,我们实现该服务接口,在该实现类上添加 @Service 注解,以标记它是一个服务层 Bean。

@Service
public class OrderServiceImpl implements OrderService {
    @Override
    public Order createOrder(Order order) {
        // 在这里执行创建订单的业务逻辑
        return order;
    }
    @Override
    public Order getOrderDetails(String orderId) {
        // 在这里执行查询订单详情的业务逻辑
        return new Order();
    }
}
}

最后,我们可以在其他组件(比如Controller)中通过注入该服务类实例来使用该服务类中的业务逻辑。例如,下面的代码示例显示了如何在Controller组件中注入并使用该订单服务。

@RestController
public class OrderController {
    @Autowired
    private OrderService orderService;
    @PostMapping("/orders")
    public Order createOrder(@RequestBody Order order) {
        return orderService.createOrder(order);
    }
    @GetMapping("/orders/{orderId}")
    public Order getOrderDetails(@PathVariable String orderId) {
        return orderService.getOrderDetails(orderId);
    }
}

传统方式是怎么做的呢?

public class OrderController {
    private OrderService orderService = new OrderServiceImpl();
    public Order createOrder(Order order) {
        return orderService.createOrder(order);
    }
    public Order getOrderDetails(String orderId) {
        return orderService.getOrderDetails(orderId);
    }
}

可以看到这种方法直接在控制器组件中创建了服务类实例,并在控制器组件中调用服务类中的业务逻辑。于是这种方式的缺点呼之欲出:
1.手动创建对象,并在代码中手动编写依赖关系。
2.每个类都必须明确地创建它需要的其他类的实例,并且在代码中显式地引用这些实例。
3.代码可能充满了繁琐的创建实例和引用实例的代码,很难维护。
这种方式在代码简单且不存在大量依赖关系时是可行的,但在复杂的项目中,代码的复杂性和依赖关系的难以维护性往往是问题。

@Service注解是怎么体现业务逻辑复用的?

下面的示例展示了如何使用 OrderService 类的多个实例在不同的地方复用业务逻辑。
首先,我们在另一个类PaymentService中注入 OrderService 实例:

@Service
public class PaymentService {
    @Autowired
    private OrderService orderService;
    public void processPayment(long orderId) {
        // 调用订单服务以获取订单详细信息
        Order order = orderService.getOrderById(orderId);
        // 执行付款操作
        ...
    }
}

这段代码中,通过注入 OrderService 类的实例,我们可以在 PaymentService 类中使用 OrderService 中的 getOrderById() 方法。这样,我们就可以在多个不同的类中复用 OrderService 中的业务逻辑,而不必在每个类中都实现一遍

总结

使用Service注解的服务类为其他组件提供了一种复用业务逻辑的方法,能够减少重复代码的编写。不需要自己手动管理对象的创建和销毁,也不需要自己手动维护对象之间的依赖关系。提高代码的可维护性。
常常与控制器组件和逻辑层的请求处理组件搭配使用:在控制器组件中注入服务类实例,然后使用该实例调用服务类的业务逻辑,将结果返回给请求处理组件。

相关文章

  • java数据结构与算法数组模拟队列示例详解

    java数据结构与算法数组模拟队列示例详解

    这篇文章主要为大家介绍了java数据结构与算法数组模拟队列示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 如何基于sqlite实现kafka延时消息详解

    如何基于sqlite实现kafka延时消息详解

    这篇文章主要给大家介绍了关于如何基于sqlite实现kafka延时消息的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Java的Struts2框架配合Ext JS处理JSON数据的使用示例

    Java的Struts2框架配合Ext JS处理JSON数据的使用示例

    这篇文章主要介绍了Java的Struts2框架配合Ext JS处理JSON数据的使用示例,包括将Ext JS中的JSON数据解析为列表的方法,需要的朋友可以参考下
    2016-03-03
  • SpringBoot?项目瘦身maven/gradle详解

    SpringBoot?项目瘦身maven/gradle详解

    这篇文章主要介绍了SpringBoot项目瘦身(maven/gradle),本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • 浅析java修饰符访问权限(动力节点Java学院整理)

    浅析java修饰符访问权限(动力节点Java学院整理)

    Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符,下面通过本文给大家简单介绍下java修饰符访问权限相关知识,感兴趣的朋友一起学习吧
    2017-04-04
  • StreamAPI多次消费一个stream代码实例

    StreamAPI多次消费一个stream代码实例

    这篇文章主要介绍了StreamAPI多次消费一个stream代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Springboot使用zxing实现二维码生成和解析

    Springboot使用zxing实现二维码生成和解析

    ZXing支持各种条形码,二维码扫描,由多个模块组成,?而且支持PC端,移动端,本文将利用zxing实现二维码生成和解析,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • 自己写的java日志类和方法代码分享

    自己写的java日志类和方法代码分享

    这篇文章主要介绍了一个自己写的java日志类和方法,下面把代码分享给大家
    2014-01-01
  • 一次Spring无法启动的问题排查实战之字节码篇

    一次Spring无法启动的问题排查实战之字节码篇

    最近学习了spring相关知识,公司项目也用到了spring,下面这篇文章主要给大家介绍了一次Spring无法启动的问题排查实战之字节码篇的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • java使用httpclient 发送请求的示例

    java使用httpclient 发送请求的示例

    HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议,这篇文章主要介绍了java使用httpclient 发送请求的示例,需要的朋友可以参考下
    2023-10-10

最新评论

?


http://www.vxiaotou.com