【发布时间】:2011-08-09 01:19:44
【问题描述】:
我们有带有 servlet 的 webapps,可以直接调用 JDBC。我们大部分都用 Spring JDBC 替换了 JDBC 调用,这是一个巨大的改进(不再有泄漏的连接!)。
我想进一步处理这些乱七八糟的代码并使用 DAO。但是,我不确定如何使用混合中的 servlet 来执行此操作,因为我知道 servlet 不能是 @autowired。
例如,现在我有一个界面:
public interface AdminDao
{
public boolean isAdmin(int id);
}
和一个实现
package myapp.dao.impl;
@Repository
public class AdminDaoSpring extends SimpleJdbcDaoSupport implements AdminDao
{
private static final String _isAdminSql
= "SELECT count(*) from admin WHERE id=?";
public boolean isAdmin(int id);
{
int cnt = getSimpleJdbcTemplate().queryForInt(_isAdminSql, id);
return (cnt > 0);
}
}
在我的 applicationContext.xml 中有
<bean id="adminDao" class="myapp.dao.impl.AdminDaoSpring"></bean>
我有一个 servlet,AdminCheckServlet,它当前可以进行上述查询。如何更改它以使用 adminDao 实例?我无法使用 @Service 注释 servlet,因为 DAO 不会被注入,因为 servlet 是由容器(Tomcat)而不是 Spring 构造的。
我是否应该创建另一个类 AdminService,并让它使用 AdminDao 处理所有调用?影响 Admin 表的 servlet 将全部实例化 AdminService 并使用它而不是直接 JDBC 调用。然而,这感觉不对。
谢谢!
保罗
【问题讨论】: