Как можем да постигнем monkey patching в Java?

+6 гласа
111 прегледа
попитан 2016 май 25 от invisi (180 точки)
Без значение, до колко е добра или лоша идея, някой има ли идея какви са начините  да постигнем monkey patching в java езика. С други думи, как можем да постигнем това, което отдавна го има в езики като Ruby, a именно да променяме и екстендваме джава методи в рънтайм? Например, имаме клас метод в някой core api, който ползва метод или обекто от друг клас, но вие иската вместо това да ползва ваша имплементация на въпросия метод или клас. Идеи?

1 отговор

0 гласа
отговорени 2016 май 27 от Daniel Ivanov (11,160 точки)

Здравей,

MonkeyPatching (динамично модифициране на клас или модул в рънтайма, с цел връщане на фиксирани данни) в Java няма (не е измислено точно така), но има няколко начина за постигане на подобен ефект:

1.Начин – чрез манипулиране на bytecode-а – техника или по-скоро хак, която се прави с помощта на няколко liberary-та – AspectJ е най-често използвана.

AspectJ , защото идва от aspect-oriented programming – AOP и прави точно това, което прави monkey patching.

http://www.eclipse.org/aspectj/

2.Начин – чрез cglib https://github.com/cglib/cglib . Cglib е code generation library, и се ползва за extend-ване на java класове и имплементиране на интерфейси по време на рънтайм. Има sample-чета и документация, всичко и върши пак същото - модифициране на byte code-а.

Успех! :)

...