JAXB использует инструментарий байт-кода?

У кого-то, где я работаю замеченный (в stacktrace), что при выполнении jvm с-javaagent:spring-instrumentation.jar моя JAXB аннотировала классы, есть странные новые методы в них, которые мы не записали: например, SomeJaxbAnnotatedClass$JaxbAccessorM_getFields_setFields_java_util_Set.get

Это означает, что jaxb использует инструментарий байт-кода, когда это доступно? Где я могу читать больше об этой функциональности?

Спасибо, Yuval

8
задан Yuval Rimar 25 January 2010 в 16:25
поделиться

3 ответа

Просто дополнение к посту Skaffman:

Что вы видите (queyjaxbannotatedclass $ jaxbaccessor ...) - это внутренний класс, который генерируется динамически реализацией справочника JAXB. Для предотвращения вознаграждения отражения во время выполнения, Bytecode для конкретных реализаций класса com.sun.xml.bind.v2.runtime.reflect.Accessor генерируются и вводятся в текущий класс загрузки, вызывая CloseLoader.defineClass ( Строка, байт [], INT, INT), после использования отражения, чтобы обойти защищенный модификатор доступа метода определенного элемента.

Итак, ссылочная реализация JAXB не является инструментом Bytecode в том смысле, что он модифицирует существующие классы, но генерирует новые классы для оптимизированной производительности времени выполнения.

12
ответ дан 5 December 2019 в 07:58
поделиться

MercuryTide Django Cheat для Django 1.5 Эндрю Дурдин и Генри Кунц.

Он охватывает модели моделей (например, Booleanfield, Charfield, Floatfield и т. Д.), Теги шаблона, шаблонные фильтры, форматы даты шаблона и многие другие. 2 страницы.

Прямая ссылка (формат PDF, 73 КБ). Старая - версия Greyscale . Версия Greyscale печатает немного лучше на черно-белом принтере, но не сильно. Этот чит-лист намного лучше подходит для цветного принтера.

-121--2823025-

Если я правильно помню, используя [MyObject Copy] создает неизменяемую копию объекта по умолчанию, поэтому, если у вас есть NSMutableArray, он становится Nsarray.

Поскольку в этом примере вы хотите сохранить мутумамность, и, следовательно, способность манипулировать, массив вы вызываете [MyObject MutableCopy]; , чтобы убедиться, что вы получаете смешную копию объекта.

-121--4746432-

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

Интересно, что вы сможете выключить это поведение, установив не документированную систему свойства, что улучшает запуск контекста, за счет производительности времени выполнения.

Отредактируйте: Я должен подчеркнуть, что это то, что эта ссылочная реализация Sun JaxB делает под крышками, это не является частью спецификации JAXB. Другие реализации могут свободно делать все, что они выбирают.

8
ответ дан 5 December 2019 в 07:58
поделиться

Последнее я проверил, JAXB использует отражение для генерации классов на основе XML, которые вы предоставляете (хотя я не использовал его в течение некоторого времени, поэтому они могли изменить их методологию).

Я знаю, что JIBX , с другой стороны, использует BCEL для выполнения приборов Bytecode. Вот статья об этом: http://www.ibm.com/developerworks/java/library/j-cwt09065/ .

1
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

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