Шаблоны управления байт-кодом

Что законное использование там для управления байт-кодом и как люди реализуют их байт-код основанные на управлении решения на практике?

Обновление: Я должен был сделать это более ясным, что этот вопрос действительно о том, что шаблоны и люди методов используют, чтобы заставить их код полететь с помощью управления байт-кодом.

Что-то как аспектно-ориентированное программирование, которое было уже упомянуто или создающий прокси, возражает динамическим и подобным методам.

7
задан ahe 23 April 2010 в 10:18
поделиться

5 ответов

Манипуляция байт-кодом позволяет реализовать произвольно сложные (и интересные) программные преобразования, такие как:

  • код регистрации входа / выхода для выбранных функций;
  • преобразования безопасности, которые закрывают доступ к определенным API,
  • подстановка API для, например, запуск кода в тестовой системе.

Возможности безграничны; это всего лишь небольшая выборка.

Что касается того, как это обычно делается, начните с здесь .

8
ответ дан 6 December 2019 в 11:47
поделиться

Существуют статьи Шаблоны аспектно-ориентированного дизайна (PDF) и Принципы аспектно-ориентированного дизайна: уроки объектно-ориентированного дизайна (PDF), в которых описываются некоторые шаблоны для АОП / манипуляции с байт-кодом.

Лично я использовал манипуляции с байт-кодом с помощью ASM в одном фреймворке , чтобы сгенерировать некоторый шаблонный код для классов, которые используют этот фреймворк. Фреймворк требует специальных методов equals () и hashCode () для клиентского кода, поэтому я генерирую эти , подключая Java-агент , который изменяет байт-код, когда ClassLoader загружает классы. Я также много раз использовал CGLIB для создания динамических прокси (если это считается AOP).

3
ответ дан 6 December 2019 в 11:47
поделиться

Одним из способов использования байт-кода является аспектно-ориентированное программирование .В Java для этого можно использовать AspectJ .

2
ответ дан 6 December 2019 в 11:47
поделиться

Некоторые платформы, такие как BEA KODO (реализация спецификации объектов данных Java), используют манипуляции с байт-кодом для «улучшения» простых старых объектов Java и добавления логики сохраняемости, основанной на описании XML.

Таким образом, информация об отображении базы данных затем автоматически генерируется на основе байт-кода.

0
ответ дан 6 December 2019 в 11:47
поделиться

Итак, можно прочитать байт-код для реализации интерпретатора / JVM. Можно написать / сгенерировать байт-код при реализации компилятора Java или компилятора для другого языка, нацеленного на JVM (например, Scala и Jython ). Вы можете выполнять манипуляции с байт-кодом для оптимизации байт-кода (если вы хотите производить и продавать оптимизатор байт-кода или вам он нужен как внутренний инструмент, чтобы дать коду вашей компании преимущество над конкурентами). Аналогичным образом вы можете манипулировать байт-кодом, чтобы запутать его перед распространением. Вы также можете выполнять манипуляции с байт-кодом для аспектно-ориентированного программирования ; например, вы можете захотеть вставить хуки (возможно, для целей хронометража или регистрации или по какой-либо другой причине), и если бы было проще или дешевле манипулировать байт-кодом, чем редактировать все исходные файлы (например, это могло бы иметь место, если исходный код недоступен или взят из множества разных источников, не все из которых могут находиться под вашим контролем или для которых может быть дорого и отнимать много времени, чтобы убедить эти команды добавить такие хуки), это может быть тот случай, когда это может сделать имеет смысл вставлять модификации в окончательный вывод байт-кода, а не пытаться изменить исходный код (что может потребовать апстриминга или поддержки отдельной вилки, или покупки исходного кода у третьей стороны, которая предоставляет только байт-код).

Вы можете манипулировать байт-кодом самостоятельно, хотя для этого существует множество существующих библиотек и фреймворков с открытым исходным кодом, включая BCEL и ASM , и это лишь некоторые из них.

4
ответ дан 6 December 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: