Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> spring autowired - инициализация бинов, необходима ленивая инициализация 
:(
    Опции темы
iluvatar
Дата 2.11.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: нет
Всего: 4



Есть такая задача:

Есть класс-контейнер бинов. Всё это дело создаю через spring

Код

   <bean id="autowiredTest" class="ru.test.AutowiredTest" parent="abstructTestImpl" lazy-init="true"/>
    <bean id="test1" class="ru.test.Test1" parent="abstructTestFunctions" lazy-init="true"/>
    <bean id="test2" class="ru.test.Test2" parent="abstructTestFunctions" lazy-init="true"/>
    <bean id="test3" class="ru.test.Test3" parent="abstructTestFunctions" lazy-init="true"/>


Как выглядят классы:
Код

@Service
public class AutowiredTest extends ATestImpl {

    @Autowired
    private Test1 test1;
    @Autowired
    private Test2 test2;
    @Autowired
    private Test3 test3;
    ....
//     getters, setters
}


и один из внутренних классов:
Код

@Service
public class Test1 extends AComplexFunctions {

    public Test1() {
        System.out.println( "test1" );
    }
}



Контейнер является синглтоном, в каком-то классе я его объявляю:
Код

public class Main {
    @Autowired
    private AutowiredTest autowiredTest;
}




Проблема в том, что autowiredTest создается не при обращении к нему, а при обращении к родительскому классу, т.е. цепь получается такая:
init Main -> init autowiredTest -> init test1, test2, test3 и т.д.

а хочется чтобы autowiredTest инициализировался перед вызовом к нему, test1, test2, test3 - только при обращении к ним и т.д.

Возможно такое?
PM MAIL ICQ   Вверх
MisterCleric
Дата 3.11.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 5
Всего: 38



Для решения такой задачи нужно реализовать паттерн прокси с ленивой инициализацией целевого объекта в каждом методе. Т.е. написать простой класс, который будет наследовать (или имплементить интерфейс) целевой класс (интерфейс целевого класса). Добавить ему приватную проперти типа целевого класса. Отделегировать все методы этому проперти, т.е. перегрузить методы так, что бы они вызывали те же методы целевого объекта. И в каждом методе делаешь проверку на то что, целевой объект != null. В ином случае создаешь (или достаешь из spring). Ну вот тебе и будет ленивая инициализация при обращении к объекту, а не во время его инициализации. Spring инициализирует бины и инжектит уже конкретные объекты в момент инициализации клиента. Так что твою задачу можно решить только своим собственным умом, а возможностями фреймворка.
Хотя, может я и не прав: мо4жет такой паттерн реализован в Spring - надо порыться...


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
iluvatar
Дата 3.11.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: нет
Всего: 4



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

Вопрос по-прежнему открыт.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.