尸鬼封尽の覆盖源码

最后更新于:2022-04-01 23:46:52

![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c278a792d147e52368f0e4d7a67907ad_244x206.png) 源于漩涡一族的超强力封印术,施术者按照“巳-亥-未-卯-戌-子-酉-午-巳’的顺序结印后双手合十便能召唤出死神,随后死神会用剑斩断目标的灵魂并将其吞噬于腹中,从而封印目标的灵魂,封印灵魂的大小随施术者决定。 一般修改功能有如下方案: **继承覆盖重写** 优点:直接解决当前问题,不用太关心上层源码实现,不用侵入源码 缺点:需要提前知晓该拓展方式,增加额外的学习成本 **直接修改源码** 优点:灵活,扩展性更高,源码在手天下你有 缺点:侵入源码后续维护成本增加,后续版本不好更新,会造成冲突 在EOVA中,某些地方提供了拓展接口,比如业务AOP,自定义按钮,自定义控件等 但是预留的扩展口总有考虑不到的地方,或者说需求的变化性太多,谁也无法预料未来的所有! 所以下面推荐一种方案,当拓展口不够用之后,可以使用"尸鬼封尽"的办法来修改源码,修订功能! 例:我想覆盖Eova的 User.java,在用户对象上面添加"公司属性",用于方便进行业务: `${user.companyId}` 想改的用户类: `com.eova.model.User.java` 将User.java 复制到 `/override/com.eova.model.User.java` ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0c3d36e165bad2fac6d223ed73144a5c_249x183.png) > PS:`override`是一个新建的源码目录 然后啪啪一顿修改(在User里添加属性) ~~~ private int companyId; public int getCompanyId() { return companyId; } public void setCompanyId(int companyId) { this.companyId = companyId; } ~~~ 重启服务,代码就生效了! > 技能奥义:利用 class加载优先级,优先加载 classes 目录*.class,然后加载lib目录中的jar *.class** 提醒:点class文件查看源码发现乱码,请点此[寻找解决办法](http://note.youdao.com/share/?id=4aff23a584eb6b0723f6992c566cffce&type=note)
';