Миграция в DAOs и Spring из сервлетов и JDBC, совет? - PullRequest
0 голосов
/ 20 апреля 2011

У нас есть веб-приложения с сервлетами, которые делают вызовы 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. Это не кажется правильным, однако.

Спасибо!

Пол

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Я бы заглянул в SpringMVC и использовал бы Spring Controller вместо использования java-сервлетов directrly.

Пружина MVC

Это довольно легко использовать. Вы создаете простой дескриптор развертывания web.xml, чтобы ваши конечные точки вызывали Springs DispatcherServlet. После этого вы можете создать класс контроллера для сопоставления этих конечных точек с методами в контроллере. Ваш контроллер может быть определен как часть вашего applicationContext, и поэтому ему может быть введен его DAO (или другие сервисы).

0 голосов
/ 20 апреля 2011

Вам необходимо использовать MVC Framework (наиболее популярными являются Struts 1.x, Struts 2 и Spring MVC), и вы сможете вызывать вас с помощью контроллеров (которые называются «Действиями» в инфраструктуре Struts).

Вот ценный ресурс об этом: http://www.ibm.com/developerworks/java/library/j-sr2/index.html

Я не уверен, что вам нужны услуги, если у вас нет многоразовой бизнес-логики.

...