Um adendo à postagem do Conde:
Se quiser deixar tudo "anotado", inclusive seu DAO, não precisa configurar o SessionFactory, uma opção é colocar ele como "autowired".
Ou configure "na mão":
@Autowired
public ISIDaoImpl(SessionFactory sessionFactory) {
setSessionFactory(sessionFactory);
}
Ou coloque como padrão no seu contexto:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName">
O autowire significa que o Spring irá descobrir qual é a dependência.
No segundo exemplo, você nem precisa colocar na classe o que será autowired. O Spring vai procurar todas as dependências da classe e se encontrar outra classe com o mesmo nome, irá injetar esta dependência. Como mágica!
Embora este método seja muito prático, é bom não abusar. Ele pode incentivar alguns erros humanos e inconsistência. Às vezes apesar de levar mais tempo, é melhor ter o xml com as dependências explicitas para maior controle.
Além disso, essas comodidades podem custar tempo. Tempo de execução! Segundo o blog ObjectLab, autowiring é mais lento. Eu pessoalmente não fiz o teste. Na grande maioria das vezes esse é um fator de peso na modelagem de um sistema, então talvez ainda valha a pena usar um contexto artesanal.
O que acham? Qual á a experiência de vocês com isso? Vale a pena sacrificar rapidez do sistema para praticidade do código?