DAO generico com Spring

Bom dia pessoal. Estou integrando o Spring com o Hibernate e Struts e surgiu uma duvida a respeito da criacao do DAO generico. È o seguinte, eu tenho uma interface generica e uma classe generica DAO que realiza os CRUD . Todos os objetos concretos implementam e extendem esses genericos.
Como eu vou criar minha classe de servico pelo IOC dos DAO’s genericos para que eu possa efetuar os CRUD’s? Veja o que eu estava fazendo. Os servicos normais eu consigo resolver mas esses que devem efetuar operacoes como CRUD que foram implementadas pela classe DAO generica eu nao consegui resolver. Segue abeixo o meu esquema. Agradeco a ajuda de todos…

interface DAO generica.


public interface GenericDAO<T, ID extends Serializable> {

	void salvar(T entity);

	void apagar(T entity);

	T consultarPorId(ID id);
}

Classe DAO generica:


public abstract class GenericHibernateDAO<T, ID extends Serializable> 
		implements GenericDAO<T, ID> {

	private Class<T> persistentClass;
	public SessionFactory sessionFactory;
	
	
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public GenericHibernateDAO() {

		this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
				.getGenericSuperclass()).getActualTypeArguments()[0];

	}

	public Class<T> getPersistentClass() {
		return this.persistentClass;
	}

	public void salvar(T entity) {
	
		this.sessionFactory.getCurrentSession().save(entity);
	}

	public void apagar(T entity) {
		this.sessionFactory.getCurrentSession().delete(entity);
	}

	public void update(T entity) {
		this.sessionFactory.getCurrentSession().update(entity);
	}
	
	public T consultarPorId(ID id) {
		
		T persistentClass = null;
		persistentClass = (T) this.sessionFactory.getCurrentSession().get(
				this.getPersistentClass(), id);
		return persistentClass;
	}

}

Classe e interface de Servico que usaria uma variavel DAO:

[code]
public interface GenericService<T, ID extends Serializable> {

void salvar(T entity);

void apagar(T entity);

T consultarPorId(ID id);

}[/code]

Classe Servico:

public class GenericServiceImpl implements GenericService {
	
	
	// Esta classe deveria ter uma variavel do tipo GenericDAO
	
	public void apagar(Object entity) {
	

	}

	public Object consultarPorId(Serializable id) {
		// TODO Auto-generated method stub
		return null;
	}

	public void salvar(Object entity) {
		// TODO Auto-generated method stub

	}

}

Todas as classes concretas extends da generica.
Como que é feito o IOC e as configuracoes nesse caso em especifico?

Pra isso que o Spring possui HibernateTemplate e JPATemplate , dê uma lida - http://blog.springsource.com/main/2006/05/30/getting-started-with-jpa-in-spring-20/

Repare no JPADaoSupport e no HibernateDaoSupport - http://static.springframework.org/spring/docs/2.0.x/reference/orm.html

Então no ApplicationContext você faz o tal “IoC” de configurações.

Para facilitar seu entendimento, sua classe GenericHibernateDAO deve herdar a classe HibernateDaoSupport e não precisa declarar sessionFactory.

Outra coisa, sua persistentClass deverá ter um setter, para você poder atribuir via IoC dos Daos, quadno for configurar a instância para cada serviço, referente ao objeto de persistência que irá de fato utilizar.

[quote=Kenobi]
Outra coisa, sua persistentClass deverá ter um setter, para você poder atribuir via IoC dos Daos, quadno for configurar a instância para cada serviço, referente ao objeto de persistência que irá de fato utilizar. [/quote]

Como assim “sua persistentClass deverá ter um setter” ? :roll:
Poderia dar um exemplo rápido ?

Edit 2: Acho que entendi, com certo esforço. Ficou meio confuso “persistentClass”, parece que está falando de uma entidade do modelo. Então, Kenobi quis se referir a classe que ira REALIZAR a persistência. Alguns chamam de ManagerXXX, outros de XXXLogic, e … tem quem chama de BO (auhauh), seria isso, né?!

[quote=peerless][quote=Kenobi]
Outra coisa, sua persistentClass deverá ter um setter, para você poder atribuir via IoC dos Daos, quadno for configurar a instância para cada serviço, referente ao objeto de persistência que irá de fato utilizar. [/quote]

Como assim “sua persistentClass deverá ter um setter” ? :roll:
Poderia dar um exemplo rápido ?

Edit 2: Acho que entendi, com certo esforço. Ficou meio confuso “persistentClass”, parece que está falando de uma entidade do modelo. Então, Kenobi quis se referir a classe que ira REALIZAR a persistência. Alguns chamam de ManagerXXX, outros de XXXLogic, e … tem quem chama de BO (auhauh), seria isso, né?![/quote]

Esqueci, não tinha olhado seu construtor.