SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同

这篇具有很好参考价值的文章主要介绍了SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

弱语言代表:Hyperf,一个基于 PHP Swoole 扩展的常驻内存框架

注解概念的举例说明;

  1. 说白了就是,你当领导,破烂事让秘书帮你去安排,你只需要批注一下,例如下周要举办一场活动,秘书将方案交给你审批,你看完后,在上面批注,要找4个知名专家来做客,要拍摄10张优质的图片做宣发小手册,秘书接到后,就开始按照你的要求帮你邀请这4个知名专家,同时还会给你拍一堆照片,同时筛选出来10个优质的做成小手册。

  2. 因为注解就是一种批注,批注者是不用执行的,所以注解里面看不到什么代码细节,而只是定义了该注解传入的可选参数

  3. 这是以leader的方式来理解注解,如果站在流水线工人的角度来理解也可以,每个流水线的工人招聘进来之后,对公司并不了解,也不知道有多少部门,但一进来就要上手开始干活了。例如A工人现在干的是加别针,他的职位牌上就是加别针,而别针的目的是为了挂铭牌,但是目前这个流水线工人不知道铭牌让谁来加,所以他就在别针上加了一个备注——挂铭牌,管理者整理衣服时会让找来挂铭牌的工人进行挂铭牌

    1. 这样工人的行为就被拆解的足够细,而整个调度过程被另外一个体系控制,所以每个工人的工作就变轻松了,他只需要知道自己要干什么,需要什么即可,至于上一个或下一个流程是谁,他不关心,这样就实现了彻底的解耦。

  4. 变换到代码层面来理解,就是你加上备注的代码,不是直接就拿去运行了,会有一个组织者,SpringBoot中就是 starter,这个 starter 会把所有带有注解的类(招聘清单)自动创建成对象(符合清单的工人),就像提前招聘好流水线工人,每个工人都给他们配备好各自的工具,等到流水线启动后,starter 就开始分发请求进来,然后在每个环节上,调度对应的工人进行处理,处理完了之后,再交付下一个工人进行处理,所以你看到的带有注解的源码,只是整个流水线中的一个逻辑节点,这种逻辑节点也称之为嵌入式节点;

  5. 在执行过程中,因为强弱语言对于注解的处理方式是不同的,所以也产生了两种解决方案,SpringBoot 基于 Java,注解就是语言特性,所以有很多处理逻辑的细节都在语言底层帮你做了,没有暴露出来,对开发者来说,就更加友好,而 Hyperf 基于 PHP,PHP 没有注解这个概念,就要人为完全模拟处理注解的过程,因此 Java 在编译后生成了新的一套代码,而 php 没有编译过程,所以hyperf 就得自己实现编译的过程,hyperf 就将注解代码生成 Proxy 代码,实际执行的也是 Proxy 代码,Java 执行的是 class 代码,实际执行的也是 class 代码,此时,两者就统一了。

  6. 如果一个人只学了SpringBoot,这个过程是很难理解到的,因为 JAVA并未暴露这个过程给你们,你们只能从更高的非 JAVA 程序员哪里了解到这个过程,所以单一语言的编程人员是会长期处于一种朦胧的认知中;

  7. 同理还有协程的概念,单独从 GO 语言去了解协程(没有细节,直接上,但是还是同步语言,协程天生就是异步语言,你从同步入手肯定会懵逼),会让人琢磨不透,如果从 python 接触协程又会暴露太多细节(同时 python 也是同步语言就更懵逼了),只有从中间态的 Javascript 入手才最简单,因为浏览器本身已经帮你实现了协程,但是又有的事件以及事件监听都是协程编程,这样你可以在中间过程彻底地体验协程的玩法(yield 语法使用),玩熟了yield 之后,再跑到 python 那边自己模拟启动一个浏览器事件循环服务,然后再执行 yield 时,理解就豁然开朗,在搞懂这块之后,再学习Go,那基本就是得心应手,这样才能玩出花来。

我相信经过上面这个解释,小白用户对注解应该一下子就豁然开朗了。

https://www.bookstack.cn/read/hyperf-2.0/annotation.md

什么是注解什么是注释?

在解释注解之前我们需要先定义一下 注解注释 的区别:

  • 注释:给程序员看,帮助理解代码,对代码起到解释、说明的作用。

  • 注解:给应用程序看,用于元数据的定义,单独使用时没有任何作用,需配合应用程序对其元数据进行利用才有作用。

应用程序,你可以理解为hyperf的启动程序bin/hyperf.php 识别了这个过程,并进行一定的处理,尤其是hyperf自定义一些注解标签,在启动bin/hyperf.php 时,会将带有注解标签的源代码翻译成执行代码,在具体执行时使用。生成proxy代理类的过程就跟npm预编译过程一样,对代码进行重新的生成。真正打包的代码是npm预编译完成后的代码,而不是源代码,而hyperf实际参与运行的代码也不是你写的源代码,认识生成代理类,所以你想调试时,在自己的源代码打断点是没用的,必须要在代理类中打断点。

SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同,Python/PHP 思维学 SpringBoot,spring boot,学习,后端

SpringBoot的注解

  1. 实现逻辑Hyperf没太大区别,区别在于语言特性,PHP语言没有注解这个概念,只有一个PHPDoc,拿来自动生成文档用的,既然能自动生成文档,那肯定是程度能识别的,所以有些人就使用PHPDoc这个东西来实现注解,只要碰到了有@的字符,然后在获取@字符后的内容,就可以按照该内容执行处理逻辑,就OK了

  2. Java的注解是语言本身的一种属性,是可以在编译时和运行时直接获得的,这直接省去了一个解析处理环节,只需要收集被注解标记的类和属性即可,这样应用程序就可以将自己已经收集到的数据进行赋值和收集,进行统一处理。

  3. SpringBoot将整个Web过程都写好了,预留了大量的要填空的内容,这些要填空的地方都起了个名字,例如叫@Controller@Service@Repository ,然后你把你写的代码上面标记这些内容,那么SpringBoot在运行时,就知道你填了这个空,在需要用到你这个逻辑时,它会从收集器中提取出来执行,同时呢,你也想获取一些东西,例如@Value,@Configuration 这些注解就可以将一些内容直接填充进来,只不过这个过程是发生在运行时,你这里只管拿去用,实现逻辑即可,到时组装起来后,就可以正常运行了,这个也可以理解为嵌入式Web开发吧,接收外界的数据,完全独立处理,然后返回结果。

  4. SpringBoot注解是先编译完成之后,SpringBoot启动时执行,所以仍然可以进行编译检查。文章来源地址https://www.toymoban.com/news/detail-658917.html

Python/PHP 思维学 SpringBoot 系列探索

学习知识都是环环相扣,我们先看看之前探索过什么

  1. SpringBoot 学习(01): javac、src/main/java目录、Maven与pip 弱类型语言为何没有子模块编译
  2. SpringBoot 学习(02): 从嵌入式系统到嵌入式Servlet SpingBoot 的进化之路_森叶的博客-CSDN博客

到了这里,关于SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring表达式语言(SPEL)学习(03)

    在表达式中直接写name和getName(),这时候Expression是无法解析的,因为其不知道name和getName()对应什么意思 当表达式是基于某一个对象时,我们可以把对应的对象作为一个rootObject传递给对应的Experssion进行取值 通过指定EvaluationContext我们可以让name和getName()变得有意义,指定了Ev

    2024年02月02日
    浏览(47)
  • SSM学习记录9:SpringBoot整合SSM(注解方式)

    启动SpringBootDemoApplication↓ springBoot项目内含tomcat服务器,无需手动配置↓ 测试结果↓ 上下图来自黑马程序员的视频教程,点击查看教程 配置文件yml与yaml语法↓ 配置文件数据读取方式(3种)↓ 配置文件: 读取方式: 若自定义方式出现警告↓ Test加载的是同级目录下的类,

    2024年02月09日
    浏览(38)
  • 【数据分析:语言篇】Python(03)创建Python虚拟环境

    根据实际开发需求,我们会不断的更新或卸载项目中依赖的Python类库,直接对我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,并且当我们同时开发多个项目的时候,可能每个项目依赖的同一个Python库的版本还不一样,就会造成版本冲突,管理相当混乱

    2024年02月03日
    浏览(75)
  • 读天才与算法:人脑与AI的数学思维笔记03_AlphaGo

    2.6.2.1. 原本平静的丛林之中激起的一丝混乱,极有可能预示着另一种动物的潜入 2.6.2.2. 这类敏感信息备受动物们的关注,因为它关系到自己会成为猎物还是猎食者,这就是大自然的生存法则 2.6.2.3. 人类的大脑非常擅长识别模式并预测它们的发展方向,同时做出适当的反应

    2024年04月22日
    浏览(38)
  • python机器学习经典算法代码示例及思维导图(数学建模必备)

    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用。 这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程,并附有相关的具体python库,做索引使用;第二部

    2024年02月12日
    浏览(39)
  • P03 注解

    系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 Gitee:https://gitee.com/lijinjiang01/JavaWeb Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制 Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注 对 Java 中类、方法、成员变量做标记,然后进行特殊处理,至

    2023年04月26日
    浏览(25)
  • 【Python机器学习】实验03 逻辑回归

    在这一次练习中,我们将要实现逻辑回归并且应用到一个分类任务。我们还将通过将正则化加入训练算法,来提高算法的鲁棒性,并用更复杂的情形来测试它。 本实验的数据包含两个变量(评分1和评分2,可以看作是特征),某大学的管理者,想通过申请学生两次测试的评分,来

    2024年02月11日
    浏览(43)
  • 《Python编程从入门到实践》学习笔记03列表

    [‘trek’, ‘cannondale’, ‘redline’, ‘specialized’] trek cannondale redline specialized specialized redline ada lovelace My first bicycle was a Trek. [‘honda’, ‘yamaha’, ‘suzuki’] [‘ducati’, ‘yamaha’, ‘suzuki’] [‘honda’, ‘yamaha’, ‘suzuki’, ‘ducati’] [‘honda’, ‘yamaha’] [‘honda’, ‘yamaha’, ‘

    2024年02月07日
    浏览(38)
  • 用springboot+elasticserach7的demo,对比sider和百度ai的异同

    对比aigc引擎:sider chatgpt3.5和百度ai 提示词: springboot2.5,连接elasticsearch7的demo,要有基本的操作,用模板方法 以下是一个使用Spring Boot 2.5连接Elasticsearch 7的示例代码,包括基本的操作方法: 首先,需要在pom.xml文件中添加Elasticsearch的依赖: 然后,创建一个Spring Boot应用程序

    2024年02月09日
    浏览(32)
  • springboot/java/php/node/python网上手机商城 【计算机毕设】

    本系统 (程序+源码) 带文档lw万字以上    文末可领取本课题的JAVA源码参考   选题背景: 随着互联网的快速发展和智能手机的普及,电子商务行业蓬勃发展,其中手机商城成为了一个热门的领域。传统的实体店面销售方式已经无法满足消费者的需求,而在线手机商城则能

    2024年02月04日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包