![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
oson |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Вот например есть класс
и в Spring файлике я его инициализирую
и где то я использую этот бин
Метод static Integer val() получается имеет такое имя как статическая переменная в классе State. Можно было бы сделать static Integer getVal() - но меня смущает, что getVal() - это зарезервированное имя как бы для НЕстатических методов. Как правильно - 1-делать метод статический с таким же именем как переменная val() или 2 - делать метод статический getVal() ? |
||||||
|
|||||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Никто его не резервировал, поэтому getVal() - лучший вариант. Но смысла в классе с статическим гетом и нестатическим сетом я не вижу ![]() -------------------- Lost.... |
|||
|
||||
ecologist |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: 2 Всего: 9 |
Тем более, что по умолчанию Спринг создает синглтоны - т.е. как раз один бин и будет создан. Вообщем-то не не вижу смысла в статике вообще. В данном конкретном случае.
Это сообщение отредактировал(а) ecologist - 28.6.2008, 00:19 |
|||
|
||||
oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Если я делаю Integer val не статик -то спринг ее вообще не инициализирует :(
Вот я пробую со статиком мудрить. Да и когда мне надо получить эту самую Val где-то в коде - (это вроде глобальной переменной для всего приложения, которую я перед стартом приложения установил в нужное мне значение в конф файле спринга) - то не хочется каждый раз создавать новый обьект
|
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
||||
|
||||
oson |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
не совсем понятно следующее
Spring по умолчанию делает синглетон. Но я когда хочу воспользоваться этим синглетоном - ну то есть тем самым единственным инстанцом который сгенерировал Спринг - то где я его должен взять? Я же все равно делаю
то есть создаю новый обьект коласса State. Если же я напишу что-нибудь типа
то я во-первых буду дублировать ту работу наверное чтоделает Спринг когда создает единственный обьект класса а во-вторых это будут 2 разных обьекта - тот что проинициализирует Спринг исходя из его xml файла, и тот что я создам вот тут в коде сам. |
||||
|
|||||
oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
А иначе получается ошибка.
Спринг создает инстанц класса State и устанавливает переменную val например в состояние 1. Но когда я в другом месте кода хочу прочитать эту переменную val и делаю
то обьект этот же сосвсем другой в отличие от созданного Спрингом и переменная val там null. |
|||
|
||||
gosnis |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 16.5.2007 Где: Тель Авив, Израил ь Репутация: нет Всего: 2 |
Я не специалист в Спринге, но, по моему, Вы не совсем понимаете синглтон. Вся фишка синглтона в том, что его конструктор приватный. Вы не можете его запустить. Инстанс синглтона получается доступом к статической функции. Что то типа Singleton s = Singleton.getInstance().
Так что меня сильно смущает Ваше new State() Это сообщение отредактировал(а) gosnis - 29.6.2008, 12:48 |
|||
|
||||
Greg |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 1 Всего: 7 |
С помощью
и его перегруженных аналогов. Идея заключается в том, что бы передать управление процессом конструирования и инициализации объектов фреймворку. Соответственно приложение априори ничего не знает о том, как создать (проинициализировать) объект, хотя ему предоставляется возможность получить экземпляр(ы) требуемого объекта через фабричный метод getBean(). --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
||||
|
|||||
oson |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Это
равносильно тому, чтоб прописать оба класса в конф файле спринга? Я имею ввиду вот так
|
||||
|
|||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 1 Всего: 7 |
Мухи и котлеты не путать. Прописать оба класса в конф файле спринга - значит указать ему как ты хочешь, что бы он создавал и инициализировал объекты этих классов. ВСЕ. После того, как приложение запустилось, в какой-то момент, спринг создает экземпляры объявленных в конфигурации классов и помещает их в свой контекст.
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
В добавок в предыдущему посту - эта строка уже не подпадает под управление Spring - это ты сам создаешь такой объект. И сам должен его инициализировать. А то, что создал Spring надо брать из его же контекста и тольок оттуда. И вот именно в этом контексте будет существовать один экземпляр. |
|||
|
||||
oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Так как правильно брать из его же контекста - прописав в файле спринга оба бина или используя BeanFactory.getBean("statebean")?
|
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
С точки зрения Spring'а первый вариант, для этого он (Spring) и придуман. Кроме того, по моему, второй вариант связан с определёнными сложностями - спринговый контекст, должен быть сконфигурирован определённым образом, чтобы в коде получить нужную реализацию интерфейса BeanFactory, и это не для каждого подойдёт. Возможно ошибаюсь, поправьте, кто спец по Спрингу. |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Конечно первый вариант. Так ты уберешь зависимость от спринга (твои классы вообще не будут знать о его существовании) и бин фактори там не к чему. Кстати, BeanFactory это интерфейс и статического метода getBean() у него никак не может быть. -------------------- Lost.... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |