У нас есть веб-приложения с сервлетами, которые делают вызовы JDBC напрямую. В основном мы заменили вызовы JDBC на Spring JDBC, который значительно улучшился (больше нет утечек соединений!).
Я хотел бы пойти немного дальше с этим беспорядком кода и использовать DAO. Однако я не уверен, как это сделать с сервлетами в миксе, потому что я знаю, что сервлеты не могут быть @ 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);
}
}
В моем приложенииContext.xml у меня есть
<bean id="adminDao" class="myapp.dao.impl.AdminDaoSpring"></bean>
У меня есть сервлет AdminCheckServlet, который в данный момент выполняет вышеуказанный запрос. Как я могу изменить это, чтобы использовать экземпляр adminDao? Я не могу комментировать сервлет с помощью @Service, потому что DAO не будет внедрен, поскольку сервлет создается контейнером (Tomcat), а не Spring.
Должен ли я создать другой класс, AdminService, и должен ли он обрабатывать все вызовы с использованием AdminDao? Затем сервлеты, влияющие на таблицу Admin, будут создавать экземпляр AdminService и использовать его вместо прямых вызовов JDBC. Это не кажется правильным, однако.
Спасибо!
Пол