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

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

注解概念的举例说明;

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

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

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

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

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

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注解的异同_第1张图片

 

SpringBoot的注解

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

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

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

  4. SpringBoot注解是先编译完成之后,SpringBoot启动时执行,所以仍然可以进行编译检查。

Python/PHP 思维学 SpringBoot 系列探索

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

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

你可能感兴趣的:(Python/PHP,思维学,SpringBoot,spring,boot,学习,后端)