powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как Serializable мешает получению класса из контекста в Spring ?
12 сообщений из 12, страница 1 из 1
Как Serializable мешает получению класса из контекста в Spring ?
    #39386734
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос навеян топиком на stackoverflow

http://stackoverflow.com/a/5225790/2674303

есть такой бин:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class WorkflowService implements Serializable {
   ...
   @PostConstruct
       public void init() {
   }
   ...
   @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
       public Collection<lData> findData(Integer contractId) {
   }    
}



такая конфигурация:

Код: xml
1.
2.
3.
<bean id="workflowService" class="com.mycompany.util.WorkflowService">
    <bean id="applicationContextProvider" class="com.mycompany.util.ApplicationContextProvider"></bean>
   <context:annotation-config />



и такой вызов

приводит к ClasscastException:

Код: java
1.
WorkflowService service  = (WorkflowService) ApplicationContextProvider.getApplicationContext().getBean("workflowService");



Пишут, что проблема в том, что сервис имплементит Serializable, какая-то фигня с прокси происходит из-за этого и если интерфейс убрать, то будет всё Ок.

Прошу объяснить, что же таки за фигня с прокси происходит.
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386755
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerи если интерфейс убрать, то будет всё Ок.
Там такого не написано.

questionerПрошу объяснить, что же таки за фигня с прокси происходит.
JDK прокси требуют интерфейсов.
Spring создаёт прокси и его возвращает в getBean(), так как @Transactional требует AOP. А AOP по-умолчанию работате через прокси.
Нельзя прокси прикастить к конкретному классу.

Что из этих 3х предложений не понятно?
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386767
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczquestionerи если интерфейс убрать, то будет всё Ок.
Там такого не написано.

Ещё написано, что интерфейс стоит выделить свой, но как я понимаю и без этого будет работать.


questionerПрошу объяснить, что же таки за фигня с прокси происходит.
JDK прокси требуют интерфейсов.
Spring создаёт прокси и его возвращает в getBean(), так как @Transactional требует AOP. А AOP по-умолчанию работате через прокси.
Нельзя прокси прикастить к конкретному классу.

Что из этих 3х предложений не понятно?[/quot]

Что меняется если мы используем не Serializable, а другой интерфейс?
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386773
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЕщё написано, что интерфейс стоит выделить свой, но как я понимаю и без этого будет работать.

Без этого будет работать только на CGLIB прокси или через инструментацию. На JDK прокси - не будет.

questionerЧто меняется если мы используем не Serializable, а другой интерфейс?
Мы может использовать публичные методы класса через интерфейс и прокси. Если у нас будет JDK прокси на Serializable, мы не можем вызвать публичные методы класса, который в эту проксю завернут. Доступны только методы классов Object и Serializable.
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386792
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz
questionerЧто меняется если мы используем не Serializable, а другой интерфейс?
Мы может использовать публичные методы класса через интерфейс и прокси. Если у нас будет JDK прокси на Serializable, мы не можем вызвать публичные методы класса, который в эту проксю завернут. Доступны только методы классов Object и Serializable.

Что, получается мы не сможем сделать каст если у нас есть хотя бы один непубличный метод в сервисе?
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386793
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЧто, получается мы не сможем сделать каст если у нас есть хотя бы один непубличный метод в сервисе?
Это из чего такой вывод??? Ты в кучу увязываешь две разные проблемы. Раздели их. Приведение типа это одна проблема - доступ к методам конкретного класса - другая.
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386796
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerЧто, получается мы не сможем сделать каст если у нас есть хотя бы один непубличный метод в сервисе?
Это из чего такой вывод??? Ты в кучу увязываешь две разные проблемы. Раздели их. Приведение типа это одна проблема - доступ к методам конкретного класса - другая.
Ok
Привести мы сможем только к интерфейсу в случае Dynamic Proxy ?

и видеть будем только методы этого интерфейса?
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386850
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо же) а что, если сделать:

MyService extends Serializable {...}

MyServiceBean implements MyService?
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39386856
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerПривести мы сможем только к интерфейсу в случае Dynamic Proxy ?

Нет. Это ограничение JDK Dynamic Proxy. С CGLIB Dynamic Proxy этого ограничения уже нет. И то и другое - Dynamic Proxy.

questionerи видеть будем только методы этого интерфейса?
Да.
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39387108
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю Spring Puzzlers. По последним данным Spring не будет создавать прокси на базе пустого интерфейса Serializable.
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39387228
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСмотрю Spring Puzzlers. По последним данным Spring не будет создавать прокси на базе пустого интерфейса Serializable.

Новая серия вышла? Ссылку можно?
...
Рейтинг: 0 / 0
Как Serializable мешает получению класса из контекста в Spring ?
    #39387349
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

Кстати, если кто объяснит что за проблема с BeanClass у String-бина - буду очень признателен. Я не понял.
YouTube Video
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как Serializable мешает получению класса из контекста в Spring ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]