Podmiana ciała metody w trakcie działania programu

0

Czy w javie jest możliwość podmiany ciała metody istniejącej klasy w trakcie działania programu?

0

Powiedz co chcesz tym osiągnąć a znajdziemy Ci rozwiązanie.

0

Piszę plugin pod pewien serwer i chcę zdezaktywować pewną metodę, która jest wykonywana bezpośrednio przez ten serwer. API serwera nie przewiduję wykonania tej czynność. Nie mogę po prostu z edytować kodu serwera, ponieważ chciałbym, aby mój plugin był kompatybilny z każdą wersją serwera.

0

Możesz wykorzystać programowanie aspektowe.

http://en.wikipedia.org/wiki/AspectJ

Przy czym to nie jest ciachanie metod w runtime, tylko modyfikacja np bajtkodu przed jego załadowaniem przez JVM. Po załadowaniu klasy jest już ona w zasadzie niezmienna.

1

Ostatnio pojawiło się ciekawe pytanie na StackOverflow - "JAVA transform string into code" - w którym autor chciał modyfikować kod źródłowy swojej apki za pomocą zewnętrznych Stringów. Odnośnik:

http://stackoverflow.com/questions/24994802/java-transform-string-into-code

2
Wibowit napisał(a):

Po załadowaniu klasy jest już ona w zasadzie niezmienna.

Bzdura. Klasę można transformowac w dowolnym momencie
http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html

0

Ano, w sumie. Ale to wymaga odpalenia agenta JVMowego.

0

A ja się zastanawiam czy tu raczej nie pomogło by dokładne przejrzenie API serwera. Możliwe, że wystarczyło by podmienienie jakiegoś modułu. Oraz najważniejsze dlaczego koniecznie chcesz deaktywować tą metodę. Czy zakładasz, że po tej operacji serwer będzie nadal stabilnie działał? Jeżeli straci stabilność, to plugin jest bez sensu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1