第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

從功能增強(qiáng)說起

標(biāo)簽:
Java

我们经常会遇到当前功能不满足现状的时候,如果是原来业务代码的话并且量少,我们就会直接改动源码逻辑来解决这个问题;如果是业务代码且量大,这种一般为共性问题,一般会统一处理解决,例如在数据吐出的时候,遍历增强数据内容,已满足需求,或者是原来代码的抽象,使用代理模式,装饰模式等等,让代码更好看,逻辑看起来更明确。

第三方库

上面说的情况,代码都是自己的情况,因为是自己的代码,所以控制这些都是相对比较open的,原来设计的一些情况,不满足就改,但是当引用的是第三方库的代码的时候,我们就会遇到很多的麻烦。
正常流程,我们会做功能增强,一般表现为代理模式。典型的就是数据库连接池。也有沿用原来的方式的,例如扩展io。原来就是装饰者模式,现在扩展,继续使用装饰者模式,还有filter,本身就是责任链模式,我们新加的话,直接把代码写好后加入配置即可。
上面说的这几种情况都是相对比较友好的情况。就是第三方库本身就比较喜欢开放,而且本身还有一些支持。

不想被扩展的编码

final

使用final关键字修饰。如果你想用一个增强的类动态替换掉原来的对象,结果对方的成员变量的描述是final的,一旦赋值不能替换。这个只能在赋值的时候必须完成增强,带来很多麻烦。

包访问权限

有些情况,我们本身比较适合继承增强,但是父类都是包访问权限,我们自己的代码一般不会和第三方的同包名。所以这种情况也是访问不到的

collections集合

emptyList(),emptyMap() ,emptySet()。通过collections创建的这几种集合都是空的,且不可变,不支持什么增删改操作。想加入一些额外的数据的时候,发现根本加布进去,必须选择替换集合的方式。

arrays

asList也是一个不可修改的集合。问题和解决方案同上。

后门

上面的问题这么多,如果遇到优先选择一些正常的手段,在正常逻辑上找出合适的方法来增强。
如果没有就只能选择一些java的特定方法了。

反射

反射可以做值的修改,没有什么限制,就是后期维护代码会比较麻烦,而且使用了字符串操作,在类找调用的时候是找不到的。

字节码修改

字节码是可以redefine或者transform的。所以在类加载的时候替换掉字节码文件中让你头疼的部分的就可以。如果不知道怎么做,查一下jvmti以及asm,javassist即可。

总结

图片描述

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開發(fā)工程師
手記
粉絲
1.6萬
獲贊與收藏
380

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消