|
|
|
Singleton в Spring layers, IOC
|
|||
|---|---|---|---|
|
#18+
Правильно ли понимаю, что Если используется singleton, то конструкции, описанные в коде ниже не являются потокобезопасными, и следовательно, если два потока зайдут в метод SimpleService.service() то может получится не то, что ожидалось. Выходы: 1. Не использовать в sinleton изменяемых свойств класса. 2. Использовать прототипы. 3. Синхронизировать доступ synchronize(this){} 4. Использовать ThreadLocal переменные. Всвязи с этим вопрос: Получается, что спринг со своей рекомендуемой layers, IOC, singleton архитектурой навязывает процедурный стиль программирования, при котором синглтоны дергают друг-друга и не имеют изменяемых свойств класса? Можно создать прототип, используя BeanFactoryLocator, но при этом мы жестко пишем в коде Spring - специфичные строки, что авторы Spring не рекомендует делать просто так, а только в тех случаях когда чужое приложение инстанциирует какой-то из классов, реализующих его интерфейс. А если так, то в каких случаях, кроме этих используется singletone=false, подскажите пожалуйста. Или ,может быть, при вызове метода getXxx(), в этом случае создастся прототип и будет возвращен, а ссылка на него обнулена? Не понятно. ============================================================================ Есть синглтон Spring: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Есть его клиент: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 22:49:44 |
|
||
|
Singleton в Spring layers, IOC
|
|||
|---|---|---|---|
|
#18+
Нашел в Spring Reference: 3.3.4.1. Lookup method Injection Теперь моя душа спокойна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 23:20:53 |
|
||
|
Singleton в Spring layers, IOC
|
|||
|---|---|---|---|
|
#18+
Можно несколькими путями пойти, когда у тебя singelton должен использовать не singelton`ы : 1. Method injection. 2. Реализовывать интерфейс BeanFactoryAware, сохранив ссылку на application context, а потом самому получать нужный bean через beanFactory.getBean(). 3. Через ObjectFactory & ObjectFactoryCreatingFactoryBean Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. beans.xml Код: plaintext 1. 2. 3. 4. 5. 6. Ну и походу в spring 2.0, если пользоваться новой схемой, аттрибут singelton был удален и вместо него ввели атрибут scope, который принимает значения: singelton, prototype, request, session, globalSession (последние три только для web приложений), если очень хочется то можно свой scope создать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 08:45:30 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2146101]: |
0ms |
get settings: |
14ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
67ms |
get topic data: |
15ms |
get first new msg: |
9ms |
get forum data: |
4ms |
get page messages: |
75ms |
get tp. blocked users: |
3ms |
| others: | 301ms |
| total: | 523ms |

| 0 / 0 |
