jfinal为什么源代码依赖于很多第三方包而打包jfinal-bin.jar用的时候不需要依赖
@JFinal 你好,想跟你请教个问题:jfinal为什么源代码依赖于很多第三方包而打包jfinal-bin.jar用的时候在程序用的时候就不需要了。。不明白原理。还有哈。我可不可以提个意见就是JFinal里面代码量很少,能不能给我们大伙剖析下。对于我们新手来说学习你这种设计思想很有帮助哦。写个文档或者录个讲解视频也是灰常的好的。嘿嘿有时间就帮帮大伙。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
https://www.cnblogs.com/shinubi/articles/6116993.html
java -- JVM的符号引用和直接引用
在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用。
1.符号引用(Symbolic References):
符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量出现。符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中。在Java中,一个java类将会编译成一个class文件。在编译时,java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替。比如org.simple.People类引用了org.simple.Language类,在编译时People类并不知道Language类的实际内存地址,因此只能使用符号org.simple.Language(假设是这个,当然实际中是由类似于CONSTANT_Class_info的常量来表示的)来表示Language类的地址。各种虚拟机实现的内存布局可能有所不同,但是它们能接受的符号引用都是一致的,因为符号引用的字面量形式明确定义在Java虚拟机规范的Class文件格式中。
2.直接引用:
直接引用可以是
(1)直接指向目标的指针(比如,指向“类型”【Class对象】、类变量、类方法的直接引用可能是指向方法区的指针)
(2)相对偏移量(比如,指向实例变量、实例方法的直接引用都是偏移量)
(3)一个能间接定位到目标的句柄
直接引用是和虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经被加载入内存中了。
引用来自“刘石法”的答案
引用来自“阿尔法兽”的答案
顺便再说一句,就是搭建Jfinal源码开发环境,同样不需要什么Spring,c3p0的包,什么都不需要。
你不是依赖了C3P0的一个类么,难道我就必须去下载一个C3P0的jar吗?不,这太傻了! 我自己建个com.mchange.v2.c3p0的包路径,写个ComboPooledDataSource的类,搞定。依赖关系,就是一个符号而已。
当然,要实际运行功能当然需要c3p0的jar包,但很多时候,我们只是需要解决依赖问题。
顺便再说一句,就是搭建Jfinal源码开发环境,同样不需要什么Spring,c3p0的包,什么都不需要。
你不是依赖了C3P0的一个类么,难道我就必须去下载一个C3P0的jar吗?不,这太傻了! 我自己建个com.mchange.v2.c3p0的包路径,写个ComboPooledDataSource的类,搞定。依赖关系,就是一个符号而已。
当然,要实际运行功能当然需要c3p0的jar包,但很多时候,我们只是需要解决依赖问题。
这就是组件化分离的结果,各个组件间没有依赖性,也就在单独使用某个组件时,其他组件即使有错误也不影响了。另外,jfinal代码量不多,而且很清晰,可以自己尝试着在写项目时,debug进去看看原理。自己动手,丰衣足食
你的问题属于基本常识,我都纳闷了怎么可能有人连这个道理都想不通。。。
源码是依赖外部类,是为了插件的需求,但是运行的时候你不调用它,你不去惹他当然就不会出错了。我下面的jar包里A类依赖B类,但B类根本不存在。我运行这个jar包完全正常,因为我根本没调用A类,也就不会调用B类,也就不会触发报错。很明显你没有理解Java的运行机制
顶一个,同意~
关键在于你不理解java的运行机制还有classload机制,呵呵
回复
确实是。。新手来着。多多指教
你的问题属于基本常识,我都纳闷了怎么可能有人连这个道理都想不通。。。
源码是依赖外部类,是为了插件的需求,但是运行的时候你不调用它,你不去惹他当然就不会出错了。我下面的jar包里A类依赖B类,但B类根本不存在。我运行这个jar包完全正常,因为我根本没调用A类,也就不会调用B类,也就不会触发报错。很明显你没有理解Java的运行机制