2010-10-14 29 views
8

Considérese la estructura de las clases siguientes:¿Está bien tener objetos Singleton DAO?

  1. BaseDAO con los métodos de la cresta PreparedStatement y obtener la conexión de la piscina
  2. AccountDAO extends BaseDAO trabajar con Account tabla a través de JDBC. Esta clase es Singleton
  3. AccountService bruja llama a los métodos de AccountDAO así: AccountDAO.getInstance().login(name, password).

AccountDAO es un grano de primavera con @Transactional anotaciones a los métodos que insertan algunos datos.

¿Esto está bien? Creo que las clases DAO individuales pueden causar problemas de rendimiento. ¿Puede ser que sea mejor usar algunas inyecciones de primavera en las clases de capa de servicio? (Soy nuevo en Spring, así que cualquier consejo será aplicado)

Respuesta

15

El enfoque recomendado en la documentación de Spring es escribir sus DAO como clases normales y usar el alcance de singleton. Esto funcionará bien si sus DAO no mantienen ningún estado. sección

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

3.4.2.

Si está utilizando Spring, no debería tener que lidiar con declaraciones preparadas y otras cosas, a menos que esté haciendo algo inseguro. Mire JdbcTemplate o HibnerateTemplate. Sí, debe conectar Spring para inyectar sus DAO en sus servicios o donde sea que necesite usarlos.

0

No estoy muy familiarizado con Spring pero, en general, no desea que se acceda a las conexiones a sus fuentes de datos desde varios subprocesos. Probablemente es O.K. si lo configura para que los objetos DAO sean pseudo-singletons dentro de un contexto de subproceso, pero no se compartan entre subprocesos. La mayoría de los contenedores IoC le permitirán hacer esto a través de la configuración.

Por supuesto, esto trae otras consideraciones sobre la coherencia de los datos en juego y debe administrarlas cuidadosamente. En general, la parte de ORM te ayudará con eso.

Cuestiones relacionadas