成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java無可匹敵的變身裝備,鋼鐵俠客的絕密味道

開發 后端
以上幾個工具包,有些是比較偏門的,但它們完成的功能卻非常酷炫。不僅酷炫,而且非常有用。在領導們頻繁開會,使用各種方法論探討怎么管理文檔,怎么自動化,怎么代碼審查的時候,你就已經把功能完成了。

 [[314667]]

 

我討厭寫一些業務代碼,不僅僅因為它們的原始意圖不是我設計的,成功了是產品的功勞,失敗了代碼要背鍋。一個重要的原因,就是重復的代碼太多,一個復雜的業務邏輯要找到它的Bug,也要下一番“苦力”。這里說的真的是苦力,而不是腦力,說明了大部分是低劣的重復勞動。

所以隨著在項目中有了話語權,我會特別善待這些可憐的同學們。一個問題,直到發現的時候,才發現它的低級,但中間的曲折,很少有人能看到,一個非技術出身的管理者對此就很難理解。職位越是高,就越關注整體的目標達成,對個體的感受卻關注的很少,這不是一個好的現象。千里之堤,潰于蟻穴。普通研發的整體水平代表了公司的競爭力。哦哦哦,我竟然違背了精英主義論調。

 

 

 

[[314668]]

 

扯遠了。下面介紹幾個開發中常用的工具包,可以在Java源文件、語法樹、字節碼之間進行轉換。用好了它們,不僅僅能實現一些黑科技,還能大大提高我們的生產力。

1、JavaPoet

有時候,我們要做一些代碼生成工具,需要生成一些Java類源文件。如果使用字符串去拼接的話,很容易拼的亂七八糟。為了解放雙手,就可以使用工具JavaPoet進行方法或者代碼塊的構建。它還提供了占位符等一系列方便的操作,使得你生成的代碼優美可讀,清脆爽口。

特別在寫一些框架的時候,可以將一些非常臟、非常累的活兒交給它。

代碼示例。

  1. MethodSpec main = MethodSpec.methodBuilder("main"
  2.                 .addStatement("int total = 0"
  3.                 .beginControlFlow("for(int i=0;i<10;i++)"
  4.                 .addStatement("total +=i;"
  5.                 .endControlFlow() 
  6.                 .build(); 

 

2、JavaCC

JavaCC是一個語法生成器和語法分析器,可以通過讀取一個.jj(它是雞雞我是姐姐)描述文件來生成一個Java文件。聽起來和JavaPoet一樣,但它是語法層面的,過程是翻譯而不是“構造”,和我們學習的編譯原理是一個層面的東西。而且JavaCC生成的文件一般是不可讀的,誰讓它和yacc以及lex比較像呢。

 

 

 

[[314669]]

 

如果你想要自定義一些表達式,或者做一個特殊格式的解析器,你可能會用到它。

與此類似的還有ANTLR。應用方面,Velocity和FreeMarker都使用JavaCC作為語法解釋器;Hibernate則使用ANTLR作為HQL的語法解釋器。

不過我還是更喜歡Ragel(不是Java的)多一些。對于這些場景來說,文件生成以后就不再依賴這些工具了,還是高效和好用更重要。

3、Javaparser

上面是通過語法樹生成Java文件(或者其他文件),Javaparser是通過Java文件生成語法樹(AST),然后基于這棵語法樹進行Java代碼的分析和修改。注意,它可以直接再根據語法樹,反向生成Java文件哦。

根據這棵語法樹,你可以直接分析一個獨立的Java文件,即使這個Java文件亂七八糟,不能通過編譯,不用在運行時使用反射等功能。配合JavaPoet可以去做一些非常有意思的功能。比如,Javaparser提取Java文件的注釋或者注解,然后通過JavaPoet生成一些自動文檔(Swagger),或者進行測試用例的自動填充。

除了這些,Javaparser可以規定十分嚴格的語法格式,所以使用它做一個代碼審查工具,甚至是做一些代碼依賴分析,也是可以的。

4、Lombok

其實這只是個輔助開發工具,應該有很多研發用起來了,它可以顯著的減少代碼量。讓我們擺脫惱人的get、set、hashCode、equals,甚至log等。

Lombok其實部分上和上面說到的Javaparser類似,不過它是JDK層面的。

在javac將Java文件解析成抽象語法樹之后(AST),Lombok則根據自己的注解處理器,動態的修改AST,增加新的節點代碼。然后,生成我們最終的字節碼。

這個技術,是由javac的注解API來實現的(JSR-269),可以讓javac在編譯期去干一些事情。

 

 

 

 

JDK做的工作,遠比我們表面上用到的那些多的多。

5、ByteBuddy

上面幾個工具都是把一些其他方式的代碼轉化為Java源文件,這些Java源文件還需要經過編譯這道工序,才能夠被真正使用。

 

 

 

 

ByteBuddy可以更進一步,直接動態生成Java類。對,就是直接加載在元空間的那種,在程序運行期間就可以動態的對class進行更改。不需要曲徑通幽,直達目的。

它的底層是ASM,所以ByteBuddy是可以直接修改字節碼的,是一種字節碼增強工具。

于此類似的工具還有JAVASIST、CGLiB等。

如果你在做一些代理類的工作,或者做一些APM等,想要實現類似Aspectj之類的功能,再或者類似Arthas那樣的故障排查工具,那這些工具正適合。

End

以上幾個工具包,有些是比較偏門的,但它們完成的功能卻非常酷炫。不僅酷炫,而且非常有用。在領導們頻繁開會,使用各種方法論探討怎么管理文檔,怎么自動化,怎么代碼審查的時候,你就已經把功能完成了。

別告訴他們!

責任編輯:武曉燕 來源: 小姐姐養的狗
相關推薦

2020-02-14 16:40:22

Java無可匹敵變身裝備

2012-12-31 09:12:27

2014-06-17 14:53:26

中興白色天機

2019-10-11 09:07:46

Java代碼對象

2018-03-29 14:51:59

智能公廁AI

2020-06-12 08:21:58

JavaScript代碼開發

2021-10-12 06:22:50

CIO首席信息官數字文化

2009-08-12 09:14:17

Windows 7市場用戶部署

2011-05-04 09:49:30

Firefox 6

2011-08-12 09:35:05

javascript

2012-01-04 10:04:24

谷歌絕密實驗室

2012-02-01 14:02:00

蘋果產品開發

2009-04-27 16:15:27

2010-06-18 09:48:22

2021-04-01 06:21:08

人工智能AI

2011-07-29 14:19:12

2022-04-13 14:39:06

機械人工智能技能

2011-05-18 10:24:16

投影儀技巧

2015-07-29 13:22:40

.NET代碼

2012-07-13 09:35:58

PHP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91久操视频 | 亚洲www啪成人一区二区 | 91福利在线观看视频 | 成人国产免费视频 | 久久亚洲国产 | 精品国产欧美一区二区三区不卡 | 在线观看欧美日韩视频 | 国产一区二区精品在线 | 日韩a | 国产精品日本一区二区在线播放 | 一道本不卡视频 | 国产999精品久久久影片官网 | 99tv成人影院 | 日韩1区 | 国产成人午夜精品影院游乐网 | 午夜精品久久久久久久久久久久 | 国产二区视频 | 欧美a视频| 国产一区二区三区四区区 | 毛片一区二区三区 | 一区二区av | 午夜精品久久久 | 四虎影院在线免费观看 | 国产精品美女一区二区三区 | 国产精品免费一区二区三区四区 | 国产精品视频网 | 日本精品网站 | 欧美国产日韩在线观看成人 | 国产精品永久在线观看 | 免费v片| 色婷婷一区二区三区四区 | 黄色国产视频 | 日韩久久精品视频 | 超黄视频网站 | 国产在线不卡视频 | 欧美成人一区二区 | 国产精品人人做人人爽 | 精品久久久久久久久久久 | 成人在线亚洲 | 久久久无码精品亚洲日韩按摩 | 欧美一区二区激情三区 |