在Spring文档中,建议使用JdbcTemplate的方法是为您在...中使用的每个类创建new模板。
public class JdbcCorporateEventDao implements CorporateEventDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}我想知道,与在上下文中将jdbctemplate定义为单例并直接将其注入Dao相比,这种解决方案有什么优势
public class JdbcCorporateEventDao implements CorporateEventDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}发布于 2013-07-02 10:49:50
来自JdbcTemplate的类级文档:
* Can be used within a service implementation via direct instantiation
* with a DataSource reference, or get prepared in an application context
* and given to services as bean reference.任何一种都可以。在这里,我有一个大型应用程序(50个DAO,100个并发用户),并且有一个用于整个应用程序的jdbcTemplate对象,该对象在spring上下文中定义。这可以很好地工作。
发布于 2014-03-20 00:08:44
直接注入JdbcTemplate的一个缺点是,如果您需要/决定使用SQLExceptionTranslator。
如果您的JdbcTemplate是单例的,则在任何类中设置SQLExceptionTranslator都会影响使用该模板的所有类。
例如..。
public class JbdcUserDAO implements UserDAO{
@Autowired
private JdbcTemplate jdbcTemplate;
public JbdcUserDAO() {
this.jdbcTemplate.setExceptionTranslator(new UserSQLExceptionTranslator());
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}和
public class JdbcCompanyDAO implements CompanyDAO{
@Autowired
private JdbcTemplate jdbcTemplate;
public JdbcCompanyDAO() {
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}通过JdbcCompanyDAO提出的SQLException也将通过UserSQLExceptionTranslator运行,即使它看起来没有注册转换器。
https://stackoverflow.com/questions/17400129
复制相似问题