真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何用golang仿springioc/aop進(jìn)行掃描

這篇文章主要講解了“如何用golang仿spring ioc/aop進(jìn)行掃描”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何用golang仿spring ioc/aop進(jìn)行掃描”吧!

創(chuàng)新互聯(lián)公司網(wǎng)絡(luò)公司擁有十載的成都網(wǎng)站開(kāi)發(fā)建設(shè)經(jīng)驗(yàn),上1000家客戶(hù)的共同信賴(lài)。提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站開(kāi)發(fā)、網(wǎng)站定制、買(mǎi)友情鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢(xún)和貼心的售后服務(wù)

Spring

Spring的主要特性:
1. 控制反轉(zhuǎn)(Inversion of Control, IoC)
2. 面向容器
3. 面向切面(AspectOriented Programming, AOP)

源碼gitee地址:
https://gitee.com/ioly/learning.gooop

原文鏈接:
https://my.oschina.net/ioly

目標(biāo)

  • 參考spring常用注解,使用golang編寫(xiě)“基于注解的靜態(tài)代碼增強(qiáng)器/生成器”

    • 配置: ComponentScan,Configuration, Bean

    • Bean聲明:Component, Service, Controller

    • Bean注入:Autowried

    • AOP注解:Before, After, Around, PointCut

子目標(biāo)(Day 5)

  • Q:搞點(diǎn)啥?

  • A:掃描go代碼文件

  • Q:具體點(diǎn)?

  • A:遞歸掃描指定的目錄下所有g(shù)o代碼,并提取結(jié)構(gòu)體,字段,方法和注解信息

  • Q:什么思路?

  • A:

    1. 逐method,解析注解

    1. 逐field,解析注解

    1. 逐struct,解析注解

    1. 讀取go文件>解析package>解析import>解析struct列表>解析field列表>解析method列表

  • Q:如何解析?

  • A:讀取文本>清除注釋>逐行正則掃描

  • Q:清除注釋?zhuān)?/p>

  • A:因?yàn)樽⑨尷锩婵梢詫?xiě)任何東西,所以清除注釋后可以減少解析錯(cuò)誤的可能

  • Q:如何清除?

  • A:

    • LINE_COMMENT = '//' [^\r\n]*

    • PARA_COMMENT = '/' . '*/'

  • Q:掃描package?

  • A:PACKAGE = ‘package' SPACE+ \w+

  • Q:掃描import?

  • A:

    • SINGLE_IMPORT = 'import' SPACE+ PACKAGE_LITERAL

    • PACKAGE_LITERAL = (PACKAGE_ALIAS SPACE+)? "\w+(/\w+)*"

    • MULTI_IMPORT = 'import' SPACE+ '(\r\n' (SPACE* PACKAGE_LITERAL)+ '\r\n)'

  • Q:掃描struct?

  • A:

    • STRUCT_START = 'type' SPACE+ \w+ SPACE+ 'struct' SPACE+ '{'

    • STRUCT_END = '}'

  • Q:掃描field?

  • A:

    • STRUCT_FIELD = SPACE+ \w+ FIELD_TYPE

    • FIELD_TYPE = BASIC_TYPE | CUSTOM_TYPE | POINTER_TYPE | ARRAY_TYPE | MAP_TYPE

    • BASIC_TYPE = 'int' | 'string' | 'bool' | ’uint‘ | 'rune' | 'byte' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'float32' | 'float64'

    • CUSTOM_TYPE = (PACKAGE_ALIAS.)?\w+

    • POINTER_TYPE = '*' FIELD_TYPE

    • ARRAY_TYPE = '[]' FIELD_TYPE

    • MAP_TYPE = 'map[' FIELD_TYPE ']' FIELD_TYPE

  • Q:掃描method?

  • A:

    • METHOD_START = 'func' SPACE+ RECEIVER METHOD_ARGS METHOD_RETURNS? '{'

    • RECEIVER = '(' RECEIVER_VAR *? RECEIVER_TYPE ')'

    • RECEIVER_VAR = \w+

    • RECEIVER_TYPE = \w+

    • METHOD_ARGS = '(' SPACE* METHOD_ARG? (SPACE* ',' SPACE* METHOD_ARG)* ')'

    • METHOD_ARG = \w+ SPACE* FIELD_TYPE

    • RETURNS = SINGLE_RETURN | MULTI_RETURN

    • SINGLE_RETURN = FIELD_TYPE

    • METHOD_RETURNS = '(' SPACE* RETURN_ARG? (SPACE* ',' SPACE* RETURN_ARG)* ')'

    • RETURN_ARG = NAMED_RETURN_ARG | UNNAMED_RETURN_ARG

    • NAMED_RETURN_ARG = \w+ SPACE* FIELD_TYPE

    • UNNAMED_RETURN_ARG = FIELD_TYPE

  • Q:提取注解?

  • A:

    • ANNOTATION = '@' \w+ (SPACE+ ANNOTATION_ATTRIBUTE+)?

    • ANNOTATION_ATTRIBUTE = AA_KEY '=' AA_VALUE

    • AA_KEY = \w+

    • AA_VALUE = [^\w,]+

    • 提取指定struct/field/method之前的連續(xù)注釋行

    • 提取 '// @'開(kāi)頭的注釋 認(rèn)為是注解行

    • 提取具體注解

感謝各位的閱讀,以上就是“如何用golang仿spring ioc/aop進(jìn)行掃描”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何用golang仿spring ioc/aop進(jìn)行掃描這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


文章名稱(chēng):如何用golang仿springioc/aop進(jìn)行掃描
文章起源:http://weahome.cn/article/gdpssh.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部