2010-10-14 14 views
8

Considerate struttura le seguenti classi:È OK avere oggetti DAO singleton?

  1. BaseDAO con i metodi per cresta PreparedStatement e ottenere la connessione dal pool
  2. AccountDAO extends BaseDAO di lavorare con Account tabella tramite JDBC. Questa classe è Singleton
  3. AccountService strega chiama i metodi di AccountDAO come questo: AccountDAO.getInstance().login(name, password).

AccountDAO è un chicco di primavera con @Transactional annotazioni a metodi che inseriscono alcuni dati.

OK? Penso che le classi DAO Singleton possano causare problemi di prestazioni. Potrebbe essere meglio utilizzare alcune iniezioni di primavera nelle classi di livelli di servizio? (Sono nuovo per la primavera, quindi qualsiasi consiglio sarà appagato)

risposta

15

L'approccio consigliato nella documentazione Spring è quello di scrivere i DAO come classi normali e utilizzare l'ambito Singleton. Ciò funzionerà correttamente se i DAO non mantengono alcun stato.

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes-prototype

sezione 3.4.2.

Se si utilizza Spring, non è necessario occuparsi di istruzioni preparate e quant'altro, a meno che non si stia facendo qualcosa di imprevisto. Guarda JdbcTemplate o HibnerateTemplate. Sì, dovresti collegare Spring ai tuoi DAO nei tuoi servizi o ovunque tu debba utilizzarli.

0

Non ho molta familiarità con Spring ma in generale non si desidera che le connessioni alle origini dati siano accessibili da più thread. Probabilmente è O.K. se lo si configura in modo che gli oggetti DAO siano pseudo-singleton all'interno di un contesto di thread ma non siano condivisi tra thread. La maggior parte dei contenitori IoC ti consentirà di farlo attraverso la configurazione.

Ovviamente, questo porta altre considerazioni sulla coerenza dei dati in gioco e devi gestirli con attenzione. Generalmente la parte ORM ti aiuterà comunque.

Problemi correlati