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

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

目录

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的使用即可,但是大家还是尽量要根据实际场景来使用,这样不仅能让我们的代码更加清晰明了,还能让我们更好地去开发一个项目。

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

相关推荐

  1. Spring @Configuration @Component 注解区别

    2024-05-13 05:44:05       50 阅读
  2. NLP模型关系

    2024-05-13 05:44:05       42 阅读
  3. 对于IOC注入两种方式(注解XML)

    2024-05-13 05:44:05       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 05:44:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 05:44:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 05:44:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 05:44:05       20 阅读

热门阅读

  1. is和==的关系

    2024-05-13 05:44:05       9 阅读
  2. 个人工控方面收藏网址记录(持续更新中)

    2024-05-13 05:44:05       11 阅读
  3. 一文搞懂MongoDB面试题(2万字长文)

    2024-05-13 05:44:05       10 阅读
  4. Qt自动形成父子关系的函数

    2024-05-13 05:44:05       13 阅读
  5. QT--3

    QT--3

    2024-05-13 05:44:05      11 阅读
  6. k8s job

    k8s job

    2024-05-13 05:44:05      11 阅读
  7. Kotlin语言泛型的形变是什么?

    2024-05-13 05:44:05       11 阅读
  8. undolog

    undolog

    2024-05-13 05:44:05      12 阅读
  9. 【C++】手搓读写ini文件源码

    2024-05-13 05:44:05       8 阅读
  10. 如何创建族表

    2024-05-13 05:44:05       12 阅读
  11. [UUCTF 2022 新生赛]ez_unser

    2024-05-13 05:44:05       13 阅读
  12. 一篇简单易懂的十大机器学习算法

    2024-05-13 05:44:05       13 阅读
  13. AtCoder Beginner Contest 353

    2024-05-13 05:44:05       12 阅读
  14. c#设置或者获取一个泛型整数指定bit的值

    2024-05-13 05:44:05       12 阅读
  15. iOS 沙盒图片的存取

    2024-05-13 05:44:05       13 阅读