Ahoj nerozumime si, ty hovoris o singletonu jako navrhovem vzoru (kdy IoC kontejner neni potreba) a ja hovorim o singletonu jako o moznosti, ze IoC vrati vzdy tu samou instanci (jednu jedinou). Mam pocit, ze i o to se zajimal puvodni tazatel.
Tam ja zadny problem nevidim, myslim, ze ani ty ne. Problem je jenom zase v ty podelany terminologii, ktera neni jednoznacna. Jira Roman Pichlík napsal(a): > problem je v tom, ze jakmile zacnes pouzivat static pristup, tak > zivotni cyklus tveho objektu a toho jak s nim naklada IoC kontejner je > diametralne odlisny. Statickou metodu pro vraceni instance toho > singletonu muze volat kdokoliv kdykoliv bez ohledu na fakt, jestli uz > IoC kontejner udelal na tom objektu vsechnu svoji praci napr. nastavil > dependence. To potom vede k tomu, ze system padne nekde uplne jinde na > NPE v zavislosti na tom, jestli ve chvili volani byla instance > singletonu vytvorena. > > Dalsi nevyhoda singletonu je v tom, ze ackoliv je to managovana beana, > lidi ji pouzivaji jako singleton. Misto toho, aby byl ten objekt nekam > injectnuty se na tom miste pozuije klasicke volani staticke metody. > Muzu mit tedy dve beany, ktere na sobe neprimo zaviseji pres singleton > a opet muze dojit k tomu, ze se nevytvori ve spravnem poradi. > > To co v tom dokumentu chybi, a bude doplneno, je fakt, ze ve chvili > kdy clovek zacne pouzivat singleton jako takovy, tak zacne zavadet do > sveho systemu opet tesne vazby mezi objekty. Zavislost na singletonu > proste nezmenim v konfiguraci, ta je zapecena uvnitr kodu. Napriklad > chci misto singletonu pro testy injectnout mock object, jak to mam > udelat? > > > 2008/10/10 Jiří Mareš <[EMAIL PROTECTED]>: >> Ahoj Dagi, >> >> priznam se, ze dokument mi na tema proc nepouzivat singletony neodpovedel. >> Kde je tedy problem, ja jen nevidim ... >> >> Diky >> >> jira >> >> PS. Pod pojmem singleton nemyslim staticke metody a statickou instanci ve >> tride, ale nastaveni v xml atribut >> singleton="true" (podobne jako tazatel). >> >> Roman Pichlík napsal(a): >>> Pokud neni uvedeno jinak, tak IoC kontejner vytvari vsechny managovane >>> objekty (beany) v singleton modu. To znamena, ze na kontejner pripada >>> pouze a jenom jedna instance daneho objektu. Jinak navrhovy vzor >>> singleton je v prostredi, kde se pouziva iversion of control, spise >>> antivzorem a vede to k problemum popsanym v tomto dokumentu >>> http://docs.google.com/Doc?id=dn53qgm_7g69mtccp. Myslite >>> >>> Takze singletony v zadnem pripade nedelat! >>> >>> Hibernate session a nebo HTTP session? >>> >>>> Zdravím konferenci >>>> >>>> Ve webové aplikaci používám Struts + Spring + Hibernate. >>>> Pro načítání dat požívám klasickou DAO vrstvu. >>>> DAO třídy si přes applicationContext Springu vstříkuji ( injection ) do >>>> tříd s aplikační logikou (Action class ve Struts). >>>> DAO třída obsahuje klasické CRUD operace. >>>> >>>> Dotaz: >>>> Mohu nastavit DAO třídy jako singletony? Mám pocit, že by mi to mohlo >>>> ušetřit nějaké zdroje, ale nejsem si jistý zda je to bezpečné z hlediska >>>> concurrency přístupů. >>>> >>>> Ve webové aplikaci by měly být přístupy k objektům ThreadSafe, ale četl >>>> jsem o nějakých vyjímkách (např. session). >> -- >> Jiří Mareš (mailto:[EMAIL PROTECTED]) >> ČSAD SVT Praha, s.r.o. (http://www.svt.cz) >> Czech Republic >> >> > > > -- Jiří Mareš (mailto:[EMAIL PROTECTED]) ČSAD SVT Praha, s.r.o. (http://www.svt.cz) Czech Republic
