Size: a a a

2021 January 15

NG

Nikita Gryzlov in pro.jvm
Я вообще был уверен, что если прокси на базе cglib, а не java proxy, то у меня нет "исходного" бина как такового, а всегда идёт работа с уже проинструментированным объектом.
источник

NG

Nikita Gryzlov in pro.jvm
Но видимо ошибся
источник

AG

Alexey Genus in pro.jvm
Оказалось, что всё вообще не так просто. Все методы должны на самом деле возвращать не прокси-объект, а настоящий. Но я посмотрел код и оказалось, что есть специальный костыль, который подменяет настоящий объект на прокси-объект.
Он находится вот здесь: org.springframework.aop.framework.CglibAopProxy#processReturnType, более того, это поведение можно сменить с помощью интерфейса org.springframework.aop.RawTargetAccess
источник

NG

Nikita Gryzlov in pro.jvm
Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶
В общем, если кратко - спринг создаёт прокси над вашим классом, в этом прокси ваши методы обернуты в аспект(который видимо создаёт прокси над возвращаемым из метода объектом). Если метод вызывается на бине, то вся эта цепочка отрабатывает, если метод вызывается напрямую, то аспекты не отрабатывают
Конкретно эти методы аспектом не перехватываются. Но насколько я понимаю, это и не нужно - так как на какой-то из методов бина в принципе существует аспект/эдвайс, то объект проксируется целиком и перехватываются все методы. Просто некоторые сразу инвокаются, а некоторые проходят через эдвайсы
источник

NG

Nikita Gryzlov in pro.jvm
Alexey Genus
Оказалось, что всё вообще не так просто. Все методы должны на самом деле возвращать не прокси-объект, а настоящий. Но я посмотрел код и оказалось, что есть специальный костыль, который подменяет настоящий объект на прокси-объект.
Он находится вот здесь: org.springframework.aop.framework.CglibAopProxy#processReturnType, более того, это поведение можно сменить с помощью интерфейса org.springframework.aop.RawTargetAccess
О как... Любопытно, покопаюсь, спасибо!
источник

DZ

Dmitriy Zanin in pro.jvm
Alexey Genus
Оказалось, что всё вообще не так просто. Все методы должны на самом деле возвращать не прокси-объект, а настоящий. Но я посмотрел код и оказалось, что есть специальный костыль, который подменяет настоящий объект на прокси-объект.
Он находится вот здесь: org.springframework.aop.framework.CglibAopProxy#processReturnType, более того, это поведение можно сменить с помощью интерфейса org.springframework.aop.RawTargetAccess
вот где собака, спасибо!)
источник

AG

Alexey Genus in pro.jvm
Ага, ещё коммент прикольный
в этом методе
// Massage return value if necessary
😂
источник

NG

Nikita Gryzlov in pro.jvm
Alexey Genus
Оказалось, что всё вообще не так просто. Все методы должны на самом деле возвращать не прокси-объект, а настоящий. Но я посмотрел код и оказалось, что есть специальный костыль, который подменяет настоящий объект на прокси-объект.
Он находится вот здесь: org.springframework.aop.framework.CglibAopProxy#processReturnType, более того, это поведение можно сменить с помощью интерфейса org.springframework.aop.RawTargetAccess
А я правильно понимаю, что это поведение специфично для спринга, и при обычном использовании aspectj (без спринговых конфигураций) getThis будет возвращать оригинальный объект?
источник

AG

Alexey Genus in pro.jvm
Да, думаю, что да.
источник

NG

Nikita Gryzlov in pro.jvm
Понятно, спасибо!
источник

ВШ

Виктор Шиян... in pro.jvm
Всем привет.
Подскажите может , кто сталкивался с таким .
С помощью maven-jaxb2-plugin генерирую классы по wsdl. И получаю ошибку
Two declarations cause a collision in the ObjectFactory class
Я так понял, что проблема в том что повторяются имена классов в wsdl и jabx на это ругается . А как эту коллизию можно разрешить ? wsdl стороннего сервиса их я менять получается не могу
источник

ВШ

Виктор Шиян... in pro.jvm
Если в wsdl изменить имя конфликтного элемента то генерация происходит нормально .
источник

VS

Vit Sh in pro.jvm
В плагине есть ручка для иггора таких ситуаций
источник

VS

Vit Sh in pro.jvm
Xautonameresolution как-то так называется
источник

C

Cargeh in pro.jvm
Vasili Pispanen
Если вы про хибернейтовский ddl auto update - такое в прод пускать нельзя
кроме шуток, если у тебя простой круд (типа предлагаемого spring data rest) или приложение, где нет сложной бизнес логики с базой, то это нормально работает. Другое дело - повышается требования уровеня знания хибы

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

а почему вдруг локально и на проде схема отлисаться будет? При условии, что девелопер делал ветку от той, которая задеплоена на инстансе
источник

AE

Alexandr Emelyanov in pro.jvm
Cargeh
кроме шуток, если у тебя простой круд (типа предлагаемого spring data rest) или приложение, где нет сложной бизнес логики с базой, то это нормально работает. Другое дело - повышается требования уровеня знания хибы

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

а почему вдруг локально и на проде схема отлисаться будет? При условии, что девелопер делал ветку от той, которая задеплоена на инстансе
да банально данные не смигрирует
источник

ВШ

Виктор Шиян... in pro.jvm
Vit Sh
Xautonameresolution как-то так называется
Выставлен уже этот аргумент в помнике
источник

C

Cargeh in pro.jvm
Alexandr Emelyanov
да банально данные не смигрирует
да, но не везде это надо
источник

VS

Vit Sh in pro.jvm
Виктор Шиян
Выставлен уже этот аргумент в помнике
Пользовал плагин от  org.jvnet.jaxb2.maven2 0.14.0 нагенирированные классы в отдельный пакет аргумент решал проблему , из веб сервиса или файла генеришь ?
источник

ВШ

Виктор Шиян... in pro.jvm
Vit Sh
Пользовал плагин от  org.jvnet.jaxb2.maven2 0.14.0 нагенирированные классы в отдельный пакет аргумент решал проблему , из веб сервиса или файла генеришь ?
Из файлов
источник