浅谈@Controller注解和其他四大注解的区别

news2024/11/28 8:44:02

各位大佬光临寒舍,希望各位能赏脸给个三连,谢谢各位大佬了!!! 

目录

1.Spring五大注解的使用约定

2.@Controller注解的特别之处

3.总结


1.Spring五大注解的使用约定

Spring的五大注解(@Controller,@Service,@Repository,@Component,@Configuration),除@Controller外,其余的注解在功能上是没什么区别的,甚至五大注解的源码都几乎是一样的,都使用了Component,如图:

@Controller
@Service
@Repository

 

@Configuration

这里我们就不看@Component了,比较它就是它本身。这里我们可以看到源码中是有value这个字段的。可以看出我们在五大注解后加上(名称)就可以修改这个类存储在容器中的名字,也就是Bean的名字。这里说的有些偏题了,我们回归正传,这五大注解的功能基本一样,那么为什么不用同一个注解来把类加入到容器中归Spring管理呢?这就涉及到我们五大注解的使用约定了。为了企业开发效率更加的高,实现高内聚低耦合,我们把业务分为三层,称为三层架构(表现层,业务逻辑层,数据层)。其中我们后端只需要做业务逻辑层和数据层。在业务逻辑层,我们还可以分出Controller(控制器,负责接收信息选择适当的业务)和Service(业务逻辑),数据层也就是DAO。我们需要根据上述分层来给我们的类注解,@Controller,@Service,@Repository分别对应的就是控制器,业务逻辑和数据层。然后我们还有些不属于这些层的小组件类和配置类,分别使用@Component和Configuration标注。当然这只是个约定,就算我们不遵守也不会出错,但是为了代码清楚明了,我的建议还是遵守这个约定。

2.@Controller注解的特别之处

@Controller和其他4大注解不同的是使用它可以被外界所访问。但是我们看上面的源码会发现,@Controller这个注解并没有什么特别的。这是因为Spring在启动时会特地关注@Controller这个注解,让其能被外界访问。

我们可以尝试一下,我们用我写的一个图书管理系统返回图书信息的一个代码来演示:

这里我们用的是@Controller

这里我们用的是@Service(任意选的一个,因为这四个都一样,质疑的哥们儿可以逐一试试)

所以我们可以验证之前的论点,@Controller这个注解,让其能被外界访问。大家在测试@Controller和其余注解的区别时一定不要在类上加@RequestMapping注解,因为@RequestMapping也被Spring赋予了被外界访问的权力。我刚开始测试的时候就是没有注意这个,导致我得出了@Controller和其余注解没区别的结论,但是在我多次改变测试环境排除外界干扰之后,得出了上述结果。所以我的这个经历能让各位明白当我们测试某个事物时,要尽量排除外界的干扰,才有可能得到事物的真实本质。

3.总结

这五大注解虽然本质都差不多,注意一下@Controller的使用即可,但是大家还是尽量要根据实际场景来使用,这样不仅能让我们的代码更加清晰明了,还能让我们更好地去开发一个项目。

制作不易,望各位大佬赏个脸,给个三连吧!!谢谢各位大佬了!!!

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

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

相关文章

flutter自定义日期选择器按日、按月、自定义开始、结束时间

导入包flutter_datetime_picker: 1.5.0 封装 import package:atui/jade/utils/JadeColors.dart; import package:flutter/cupertino.dart; import package:flutter/material.dart; import package:flutter_datetime_picker/flutter_datetime_picker.dart; import package:flut…

040——移植数据库sqlite3到i.mx6ull

目录 一、下载 二、移植数据库 三、测试sqlite3 一、下载 SQLite Download Page 暂时先下载最新版的试试,我们以前其实在ubuntu上直接使用过 嵌入式数据库sqlite3_常见的嵌入式数据库-CSDN博客 当时我把常用的操作和怎么使用记录下来了 现在把他移植到开发板…

SamFirm Reborn 0.3.6.8三星固件下载器 汉化版

介绍 在三星手机的维护和升级过程中,固件的获取往往成为了一个难题。幸运的是,有一群热爱技术的开发者们,他们开发了各种工具以简化这个过程。今天,我们要介绍的是一款名为SamFirm Reborn 0.3.6.8的三星固件下载器的汉化版。它旨在…

Java8 ConcurrentHashMap 存储、扩容源码阅读

文章目录 1. 概述2. 入门实例3. 属性4. 核心方法4.1 put4.2 initTable4.3 transfer4.4 sizeCtl4.5 sizeCtl bug 1. 概述 ConcurrentHashMap 是线程安全且高效的 HashMap。 HashMap 可以看下我这篇 传送门 。 2. 入门实例 public class MyStudy {public static void main(St…

什么是数据平台——企业构建Data+AI的基础数据底座需要的决策参考

什么是数据平台 标准的解释是这样的 Wikipedia A data platform usually refers to a software platform used for collecting and managing data, and acting as a data delivery point for application and reporting software. 数据平台是指将各类数据进行整合、存储、处…

实现字符串比较函数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, result;char s1[100], s2[100];//填充数组&#xff1b;printf("请输入数组s1的…

Docker 直接运行一个 Alpine 镜像

由于镜像很小&#xff0c;下载时间往往很短&#xff0c;读者可以直接使用 docker run 指令直接运行一个 Alpine 容器&#xff0c;并指定运行的 Linux 指令&#xff0c;例如&#xff1a; PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…

docker八大架构之应用数据分离架构

数据分离架构 什么是数据分离架构&#xff1f; 数据分离架构是指应用服务&#xff08;应用层&#xff09;和数据库服务&#xff08;数据层&#xff09;使用不同的服务器来进行操作&#xff0c;如下边的两个图所示。当访问到应用层后&#xff0c;如果需要获取数据会进行访问另…

【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout 文章编号&…

基于STM32的风量控制器的Proteus仿真

文章目录 一、风量控制器1.题目要求2.思路3.仿真图4.仿真程序4.1 程序说明4.2 主函数4.2 OLED显示函数4.3 按键函数 三、总结 一、风量控制器 1.题目要求 设计一个可以风量控制器进行通信的控制板&#xff0c;该控制板由1块OLED显示屏和8个物理按键组成&#xff0c;其中显示屏…

落雪音乐 超好用的桌面端音乐播放器

之前一直都是充某Q音乐的会员&#xff0c;突然不想氪金了&#xff0c;终于找到一个开源的音乐播放器&#xff0c;在此先给落雪无痕大佬跪了 太爱了 简直白嫖怪的福音 话不多说&#xff0c;直接上操作&#xff1a;解压密码&#xff1a;www.1234f.com下载地址&#xff1a;极速云…

B/S模式的web通信(高并发服务器)

这里写目录标题 目标实现的目标 服务器代码&#xff08;采用epoll实现服务器&#xff09;整体框架main函数init_listen_fd函数&#xff08;负责对lfd初始化的那一系列操作&#xff09;epoll_run函数do_accept函数do_read函数内容补充&#xff1a;http中的getline函数 详解do_re…

DE2-115开发板基于verilog和nioⅡ的流水灯实现

目录 一、 内容概要二、 实现2.1 基于Nios II软核的流水灯2.1.1 准备工作2.1.2 工程搭建2.1.3 硬件代码设计Ⅰ 连接IP核Ⅱ 编写代码Ⅲ 各种配置 2.1.4 软件代码设计Ⅰ 环境构建Ⅱ 编写代码 2.1.5 代码下载Ⅰ 硬件下载Ⅱ 软件下载 2.1.6 运行结果 2.2 Verilog流水灯 三、 心得体…

LORA学习笔记2——训练集处理

前言 对于ai训练来说&#xff0c;处理训练集是模型训练的重要环节。训练集的质量对最终模型的质量影响巨大。这里以二次元角色为例&#xff0c;记录下训练集处理的流程和一些心得。 素材准备 素材准备有以下几个需要注意的点&#xff1a; 通常训练二次元角色需要30张以上的…

栈和队列(栈的详解)

目录 栈栈的实现栈的结构栈的初始化栈的销毁入栈出栈获取栈顶元素栈的判空获取栈的数据个数test.c(测试)总结 栈 栈也是线性表&#xff08;在逻辑上是顺序存储&#xff09;的一种&#xff0c;栈只允许其在固定的一端进行插入和删除&#xff0c;栈中的元素遵循后进先出&#xf…

Linux-笔记 开发板Uboot命令使用

将之前自学的知识整理了一下笔记&#xff0c;以便回忆 信息查询命令 1、help/?&#xff1a;查看所支持命令 > ? md md - memory displayUsage: md [.b, .w, .l] address [# of objects]2、bdinfo&#xff1a;查询板子信息 > bdinfo arch_number 0x00000000 boot_p…

多商户Docker Supervisor进程管理器部署

Dockerfile 根目录下没有Dockerfile的可以复制下面的命令 # 使用基础镜像 FROM leekay0218/crmeb-mer## 复制代码 ## 在本地调试注释掉&#xff0c;使用映射把文件映射进去 #ADD ./ /var/www# 设置工作目录 WORKDIR /var/www# 设置时区为上海 ENV TZAsia/Shanghai RUN ln -sn…

对数据进行标准化和归一化

数据的形式&#xff1a;保存在CSV中&#xff0c;第一列为姓名&#xff0c;第二列之后为特征。 标准化 输入文件的路径&#xff0c;设置保存转化后的文件路径 import pandas as pd from sklearn.preprocessing import StandardScaler# 读取CSV文件 data pd.read_csv(rC:\User…

开发时如何快速分析代码和生成测试方法(Baidu Comate插件帮我一键分析)

目录 前言 Baidu Comate智能编码助手简介 安装教程 使用RabbitMQ一个绑定队列方法进行演示 进行测试现有功能 使用感觉 测试结果 前言 因为在开发代码的时候&#xff0c;发现有很多都是废话也不是很想写注释 的&#xff0c;毕竟程序员最讨厌的两件事情&#xff0c;一…

Hikyuu高性能量化研究框架助力探索

Hikyuu Quant Framework 是一款基于C/Python的开源量化交易分析与研究工具&#xff0c;主要用于A股市场的交易策略分析与回测&#xff0c;目前不支持期货等&#xff0c;需要自行改造。 Hikyuu的目标 Hikyuu的最初目的是为了快速对A股全市场股票进行策略回测和验证&#xff0c…