2010-10-14 56 views
8

考慮下面的類的結構:單身DAO對象可以嗎?

  1. BaseDAO與方法到波峯的PreparedStatement並從池
  2. AccountDAO extends BaseDAO連接通過JDBC與Account表工作。這個類是單
  3. AccountService巫調用AccountDAO的方法是這樣的: AccountDAO.getInstance().login(name, password).

AccountDAO是一個Spring bean與@Transactional註釋是插入一些數據的方法。

可以嗎?我認爲單身DAO課程可能會導致性能問題。可能是最好在服務層類中使用一些彈簧注入? (我是Spring的新手,所以任何建議都會被調用)

回答

15

Spring文檔中推薦的方法是將DAO編寫爲普通類並使用單例作用域。如果你的DAO沒有保持狀態,這將工作正常。

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

3.4.2節。

如果你正在使用Spring,你不應該需要處理準備好的語句和什麼,除非你正在做一些不可思議的事情。看看JdbcTemplate或HibnerateTemplate。是的,您應該聯繫Spring將您的DAO注入您的服務或任何您需要使用它們的地方。

0

我對Spring並不太熟悉,但一般而言,您不希望從多個線程訪問到您的數據源的連接。這可能是O.K.如果將其配置爲使DAO對象在線程上下文中是僞單例,但不會跨線程共享。大多數IoC容器將允許您通過配置完成此操作。

當然,這會帶來有關數據一致性的其他考慮因素,您必須仔細管理這些因素。通常情況下,ORM部分將幫助你。