![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Foror |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: 1 Всего: 2 |
Делаю один open-source проект для веб-разработчиков и столкнулся с проблемой, что я плохо разбираюсь с генерацией байткода через javassist, asm. etc. Мне нужно в одном классе заменить у поля тип (там интерфейс SecurityAccount<SomeType, SomeSomeType>). Нужно интерфейс заменить на класс (не обязательно generic). Попробовал javassist - field.setType(). Вроде получилось, но hibernate3 так и не смог увидеть это изменение. Hibernate3 при маппинге вызывает field.getGenericType() (а не field.getType()), который возвращает generic интерфейс SecurityAccount<SomeType, SomeSomeType>.
Вчитался подробнее в javassist документацию и выяснилось, что он не умеет работать с generic'ами. Поискал еще высокоуровневые библиотеки, которые умеют устанавливать generic типы, но так и не нашел. Сейчас вот буду разбираться с ASM. Собственно мне также можно в рантайме добавить аннотацию @Target(Class) на SecurityAccount<SomeType, SomeSomeType> поле. Но в javassist не удалось найти как это сделать. Собственно, может кто разбирается как мне изменить тип (чтобы getGenericType() возвращал именно его) или добавить аннотацию в рантайме (на ASM, BCEL, javassis или любой другой либе)? А я вам клёвый open-source проект сделаю, типа spring, но клёвее --------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Плохая идея. Возьмите класс, в котором есть код и чтения и записи поля (а это почти любой класс), измените тип этого поля, попытайтесь скомпилировать. А теперь представьте что будет в рантайме. Скорей всего верификатор байт-кода не пропустит. Ну а в худшем случае можно получить непонятные ошибки с приведением типов. |
|||
|
||||
| Foror |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: 1 Всего: 2 |
Даже если класс наследует этот интерфейс? А как насчёт добавления аннотации в рантайме на нужное поле? Кто-нибуль знает как это сделать?
--------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
||||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
||||
|
||||
| Foror |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: 1 Всего: 2 |
Покажите пожалуйста код добавления аннотации в рантайме. Из-за этой штуки весь проект стопанулся, и времени как-то нет разобраться с ASM...
--------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Правда тут делается копия обьекта! Про анотации, меня самого тема заинтересовала. Я думаю надо использовать ASM/CGlib (хотя он базируется на АСМе). Вот тут пример работы с аннотациями: статья. Надеюсь статья поможет в борьбе с этой проблемой! Это сообщение отредактировал(а) Tony - 4.5.2009, 14:45 |
|||
|
||||
| Foror |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: 1 Всего: 2 |
Ага, смотрел эту статью, только ничего там не понятно
--------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
| ivg |
|
||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Как то так. |
||||||
|
|||||||
| Foror |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: 1 Всего: 2 |
Ага, спасибо, попробую этот код на неделе. Я же решил сделать просто через генерацию XML override в hibernate annotations, где в target указывать нужный класс.
--------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |