使用JDBCDAOSupport扩展DAO,这是一种不好的做法?

时间:2015-01-29 09:26:44

标签: java spring jdbc

我在互联网和现实生活中看到过很多例子。人们在使用Spring框架时使用JDBCDaoSupport扩展其DAO。它在概念上非常错误,因为扩展或继承是"是"关系。虽然我们的DAO是DAO,但它不是任何类型的DAOS支持。通过使用JDBCDaoSupport扩展它,我们将其设为JDBCDaoSupport。如果有人想使用JDBCDaoSupport,他应该通过组合而不是通过继承来使用它。我是对的吗?

1 个答案:

答案 0 :(得分:0)

你确定你没有提到Spring的JdbcDaoSupport吗?

来自javadoc

  

基于JDBC的数据访问对象的便捷超类。需要一个   要设置的DataSource,提供基于它的JdbcTemplate   通过getJdbcTemplate()方法的子类。

在实现决策方面,为什么JdbcDaoSupport使用内部继承而不是组合,因为DaoSupport是一个抽象类。这是教科书继承,因为DaoSupport是一个由Jdbc / Hibernate / Cci DaoSupport类子类化的骨架支持实现。

就我们为什么从JdbcDaoSupport扩展我们的Daos而不是使用组合而言,我们可以直接获得getJdbcTemplate()getDataSource(),而不必创建我们自己的基础设施来公开它们。在这种情况下,我们不需要Spring提供这样的支持类,因为我们的Dao实现在某种意义上完成了所有的工作。 Spring提供的这些* DaoSupport类对我们的Daos来说是一个非常薄的支持层。

我会接近'组成或继承'选择具有批判性思维,因为有合理的情况,每种方法最合适。