|
|
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
Вопрос навеян топиком на stackoverflow http://stackoverflow.com/a/5225790/2674303 есть такой бин: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. такая конфигурация: Код: xml 1. 2. 3. и такой вызов приводит к ClasscastException: Код: java 1. Пишут, что проблема в том, что сервис имплементит Serializable, какая-то фигня с прокси происходит из-за этого и если интерфейс убрать, то будет всё Ок. Прошу объяснить, что же таки за фигня с прокси происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 12:14 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
questionerи если интерфейс убрать, то будет всё Ок. Там такого не написано. questionerПрошу объяснить, что же таки за фигня с прокси происходит. JDK прокси требуют интерфейсов. Spring создаёт прокси и его возвращает в getBean(), так как @Transactional требует AOP. А AOP по-умолчанию работате через прокси. Нельзя прокси прикастить к конкретному классу. Что из этих 3х предложений не понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 12:27 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerи если интерфейс убрать, то будет всё Ок. Там такого не написано. Ещё написано, что интерфейс стоит выделить свой, но как я понимаю и без этого будет работать. questionerПрошу объяснить, что же таки за фигня с прокси происходит. JDK прокси требуют интерфейсов. Spring создаёт прокси и его возвращает в getBean(), так как @Transactional требует AOP. А AOP по-умолчанию работате через прокси. Нельзя прокси прикастить к конкретному классу. Что из этих 3х предложений не понятно?[/quot] Что меняется если мы используем не Serializable, а другой интерфейс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 12:41 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
questionerЕщё написано, что интерфейс стоит выделить свой, но как я понимаю и без этого будет работать. Без этого будет работать только на CGLIB прокси или через инструментацию. На JDK прокси - не будет. questionerЧто меняется если мы используем не Serializable, а другой интерфейс? Мы может использовать публичные методы класса через интерфейс и прокси. Если у нас будет JDK прокси на Serializable, мы не можем вызвать публичные методы класса, который в эту проксю завернут. Доступны только методы классов Object и Serializable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 12:47 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz questionerЧто меняется если мы используем не Serializable, а другой интерфейс? Мы может использовать публичные методы класса через интерфейс и прокси. Если у нас будет JDK прокси на Serializable, мы не можем вызвать публичные методы класса, который в эту проксю завернут. Доступны только методы классов Object и Serializable. Что, получается мы не сможем сделать каст если у нас есть хотя бы один непубличный метод в сервисе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:08 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
questionerЧто, получается мы не сможем сделать каст если у нас есть хотя бы один непубличный метод в сервисе? Это из чего такой вывод??? Ты в кучу увязываешь две разные проблемы. Раздели их. Приведение типа это одна проблема - доступ к методам конкретного класса - другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:10 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerЧто, получается мы не сможем сделать каст если у нас есть хотя бы один непубличный метод в сервисе? Это из чего такой вывод??? Ты в кучу увязываешь две разные проблемы. Раздели их. Приведение типа это одна проблема - доступ к методам конкретного класса - другая. Ok Привести мы сможем только к интерфейсу в случае Dynamic Proxy ? и видеть будем только методы этого интерфейса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:14 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
Надо же) а что, если сделать: MyService extends Serializable {...} MyServiceBean implements MyService? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:55 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
questionerПривести мы сможем только к интерфейсу в случае Dynamic Proxy ? Нет. Это ограничение JDK Dynamic Proxy. С CGLIB Dynamic Proxy этого ограничения уже нет. И то и другое - Dynamic Proxy. questionerи видеть будем только методы этого интерфейса? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 13:59 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
Смотрю Spring Puzzlers. По последним данным Spring не будет создавать прокси на базе пустого интерфейса Serializable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 18:43 |
|
||
|
Как Serializable мешает получению класса из контекста в Spring ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСмотрю Spring Puzzlers. По последним данным Spring не будет создавать прокси на базе пустого интерфейса Serializable. Новая серия вышла? Ссылку можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2017, 22:39 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=76&tid=2123248]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 270ms |

| 0 / 0 |
