【SpringBoot】✈️@Service 代替 @Controller 在控制层场景使用

目录

🍸前言

👋一、区别

🍻二、本地测试

        2.1 响应类

        2.2 控制层

        3.@Service 测试

🍺三、分析

👀四、章末


🍸前言

        小伙伴们大家好,由于最近比较忙,文章更新的稍微怠慢了,在忙什么?那肯定不是忙着做天命人

        今天不更新别的,就拿我之前亲身经历过的一个面试问题吧,当时遇到这道题的时候感觉挺有意思的,但是后面也没有正式了解,今天来实践下。问题看标题能了解到,@Controller 注解能被 @Service 注解代替使用吗?

👋一、区别

        @Service 注解和 @Controller 在平时开发的时候,并没有太多注意,主要是使用上有些不同。

        @Service 主要是用来标识一个服务类,表示这个类是用来负责处理业务逻辑,与数据访问层交互的。

        @Controller 主要是用来标识一个控制器类,表示该类负责处理 WEB 请求,负责将用户请求分发到适当的服务层,然后返回响应。

🍻二、本地测试

        简单创建一个 springBoot  项目测试下即可

        2.1 响应类

        实体类结构很简单,三个属性,@Data 注解简化 get(),set() 方法的编写,@AllArgsConstructor 注解标注全参构造函数(注意使用了这个注解后,默认的无参构造函数就不能使用了,因为默认会提供一个无参构造函数,如果自定义了构造方法,那么默认的失效)

        2.2 控制层

         先模拟正常使用 @Controller 的方式,请求的话就直返回一个实体类对象即可;

import org.example.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/test")
public class TestServiceController {

    @GetMapping("/getTestService")
    @ResponseBody
    public User getTestService(){
        User user = new User("贫僧不白", "灵山脚下", 666);
        return user;

    }
}

        请求结果如下:这里推荐一个快捷请求插件,cool request ,安装这个插件后,在 请求层中的每个方法旁边会有一个标识,点击直接跳转到右边的页面,并且路径,参数,请求体都会直接生成,调试的时候可以省下很多步骤
 

        3.@Service 测试

        将 @Controller 改为 @Service,别的地方不需要改动,结果如下:可以看到结果正常显示,说明这里使用 @Service 代替 @Controller 没什么影响

🍺三、分析

        通过简单的测试发现,可以使用 @Service 代替 @Controller 标注在控制层上,当时遇到这个问题的时候,感觉这两个注解在没有特殊情况时,都只是声明式注解 ,标注的类可以被 SPring 容器加载注入,所以可以互相替代。

        查找相关文章后,得出结论,大概就是控制层的方法,会在 AbstractHandlerMethodMapping 中的 afterPropetriesSet() 完成请求 url 与方法的映射绑定;而控制层会有一个@RequestMapping 注解,借助这个注解可以完成 url 和方法的映射关系维护,所以只要确保 bean 能注入到容器(@Controller @Service 都可以声明为bean)即可,不需要这两个注解处理方法与 URL 的映射。

        

👀四、章末

        文章到这里就结束了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先锋 Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值