Несколько вещей о спящем сеансе ...
1.) Я хотел бы взглянуть на интеграцию Spring * управления транзакциями в ваш проект.Таким образом, вам не нужно беспокоиться об открытии и закрытии сессии, потому что Spring будет обрабатывать это для вас с помощью перехватов с помощью аннотации @Transactional.
2.) Если Spring обрабатывает ваши транзакции, у вас не будетбеспокоиться о выполнении вызовов finally, чтобы убедиться, что все закрыто или откатано.
3.) Если вы решите не использовать Spring для управления сеансами, вы должны , а не оставить его открытым длялюбой продолжительный период времени, но опять же, если вы используете Spring, вам не нужно об этом беспокоиться.
Что касается интерфейса классов DAO, я предлагаю это ...
1.) Кодирование интерфейсов считается хорошей практикой проектирования (см. Комментарии ниже), и здесь есть несколько веских причин, почему.
Допустим, у вас есть ...
public interface ShoppingCartService{
public void doStuff(Object obj);
}
Вы можете представить эту службу как сервлет и иметь дело только с тем «контрактом», который создает ваш интерфейс, или даже скрыть тот факт, что вы используетеHibnerate, JDBC или что-нибудь еще ...
@Service
public class PetShopShoppingCartService implements ShoppingCartService{
@Transactional(propagation=Propagation.REQUIRED)
public void doStuff(Object obj){
//The Pet Shop service impl uses hibernate!;
}
}
или ...
public class DrugStoreShoppingCartService implements ShoppingCartService{
public void doStuff(Object obj){
//The Drug Store service uses JDBC;
}
}
Или даже ...
public class NextBigThingShoppingCartService implements ShoppingCartService{
public void doStuff(Object obj){
//do stuff with next big thing;
}
}
Я думаю, вы получитекартина.Если вы разрабатываете публичные API или предоставляете сервисы, это становится довольно важным.
Наконец, еще одна веская причина для создания интерфейсов - работа в команде из более чем нескольких разработчиков.Вы можете быстро заглушить интерфейс, зарегистрироваться и сообщить всем остальным, что так оно и будет выглядеть.Это позволяет им видеть, что важно, и даже высмеивать их собственные значения, если им нужно (ThingServiceMockDataImpl
)