出发地:码农翻身

我就是鲜为人知的ASM。你可能听说过我,也可能根本不认识我。

但如果你认为我微不足道,那你就大错特错了。

没有我,你经常用Spring,hibernate会失去核心功能。

没有我,Jython,JRuby根本无法移植到Java虚拟机中。

没有我,Clojure,Groovy无法在Java虚拟机中运行。

用一句话概括我的能力:可以动态修改编译后的类,动态生成新的java类。注意“动态”这个词,运行时完全可以在内存中完成,这是一个非常强大的技能。

既然生来就是动态修改类文件的,为什么叫ASM?

其实我的造物主在创造我的时候,也是煞费苦心给我起名的。后来他突然想到C语言中的关键字__asm__允许你用C语言写一些编译,于是就挪用了关键字asm。

考虑到命名真的是一件很折磨人的事情,我就忍了。姑且称之为ASM吧,至少说明我是系统的底层。不,应该说是最基础的层次。

听到下面有人问,不是动态生成的类吗?像jsp一样,我可以通过使用javaComplier接口在运行时动态编译Java源代码。这不是动态生成类吗?

其实不一样。您正在创建一个新类。可以修改现有的类吗?

又有人说话了。为什么要在运行时动态修改类?为什么编译前不能把类的函数都写完?

当然,如果能把函数都写好,那自然是好的,但是十有八九,生活不如意。

举一个极端的例子,你得到了一个jar文件,没有其他人的源代码。要不要提升一个档次?你可能会说:我可以反编译...算了,我可以看反编译的代码吗?

而你经常说的AOP,在配置文件中声明了一些功能,比如事务支持,然后想把这些功能动态的编织到业务代码中,那又如何?有人说我可以用Java动态代理,没错,你可以用,但是人如果没有接口,还是要盯着担心。

对了,你AOP里的那些术语真的很烂。切入点和建议除了迷惑人还有什么用?

对了,还有那个Hibernate,你不知道所谓的实体类是我增强的吗?你用的不是你看到的,懂吗?

那么如何动态修改类呢?其实很简单。下载一个Java虚拟机规范,花半年时间看懂每一个字。最后,就像《黑客帝国》里的Neo,整个世界就是一个二进制流,你自然明白我是怎么做到的。

●此商品编号为418。以后想看这篇文章,直接输入418就可以了。

●输入m获取文章目录

推荐↓ⅵ

前端开发

更多推荐""

涵盖:程序生命、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、Android开发、iOS开发、C/C++、。NET、Linux、数据库、运维等。

1.《asm ASM: 一个低调成功者的自述》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《asm ASM: 一个低调成功者的自述》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1696656.html