Integração Spring com Hibernate e JSF

Bom dia pessoal,
Eu fiz um CRUD usando Hibernate e JSF. Agora preciso saber como integrar o código abaixo usando o Spring. Alguem pode me ajudar por favor:

package controle;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIData;

import org.hibernate.Query;
import org.hibernate.Transaction;
import org.hibernate.Session;

import entidades.Idioma;

import util.HibernateUtil;
import util.SessionUtil;

public class IdiomaBean {

private Idioma idioma = new Idioma();
private List<Idioma> lista = new ArrayList<Idioma>();	
private UIData objDataTableIdioma;
private String desc = "";

public String getDesc() {
	return desc;
}

public Idioma getIdioma() {
	return idioma;
}

public UIData getObjDataTableIdioma() {
	return objDataTableIdioma;
}	

public void setDesc(String desc) {
	this.desc = desc;
}

public void setIdioma(Idioma idioma) {
	this.idioma = idioma;
}	

public void setObjDataTableIdioma(UIData objDataTableIdioma) {
	this.objDataTableIdioma = objDataTableIdioma;
}

public void setLista(List<Idioma> lista) {
	this.lista = lista;
}

public List<Idioma> getLista() {
	if (desc.equals("")) {
		lista = listaTodosIdiomas();
		return lista;			
	} else {
		return lista;
	}			
}

public String pesquisaIdiomas() {
	if (desc.equals("")) {
		lista = listaTodosIdiomas();
	} else {
		lista = listaIdiomasPorNome(desc);
	}
	return null;
}

public String salvar() {
	//Cria a sessao com o banco e a transaçao
	Session session = HibernateUtil.getSession();
	Transaction t = session.beginTransaction();
	
	try {
		//salva o objeto curso e se der tudo certo comita a transação
		session.merge(idioma);
		t.commit();
		SessionUtil.addSuccessMessage("OperacaoSucesso");
		//limpa o objeto idioma para novas inserções
		idioma = new Idioma();			
	} catch (Exception e) {
		// se ocorrer algo errado cancela a transacao
		t.rollback();
		SessionUtil.addErrorMessage("OperacaoFracasso");
	} finally {
		//fecha a sessao com o banco de dados
		session.close();
	}
	return null;
}

public String alterar() {
	//Pega o objeto selecionado no DataTable
	idioma = (Idioma) objDataTableIdioma.getRowData();
	return "alteraIdioma";
}

public String excluir() {
	//Pega o objeto selecionado no DataTable
	idioma = (Idioma) objDataTableIdioma.getRowData();
	//Cria a sessão com o banco de dados e a transação
	Session session = HibernateUtil.getSession();
	Transaction t = session.beginTransaction();
	try {
		//exclui o objeto idioma e se der tudo certo comita a transação
		session.delete(idioma);
		t.commit();
		SessionUtil.addSuccessMessage("OperacaoSucesso");
		//limpa o objeto idioma para novas inserções
		idioma = new Idioma();			
	} catch (Exception e) {
		// se ocorrer algo errado cancela a transacao
		t.rollback();
		SessionUtil.addErrorMessage("OperacaoFracasso");
	} finally {
		//fecha a sessao com o banco de dados
		session.close();
	}
	return null;
}

public List<Idioma> listaTodosIdiomas() {
	//Cria a sessão com o banco
	Session session = HibernateUtil.getSession();
	//Cria a Query de consulta
	Query q = session.createQuery("from Idioma");
	//Joga o resultado da consulta dentro de uma list
	List<Idioma> idiomas = q.list();
	return idiomas;
}	

public List<Idioma> listaIdiomasPorNome(String desc_idioma) {
	//Cria a sessão com o banco
	Session session = HibernateUtil.getSession();
	//Cria a Query de consulta
	Query q = session.createQuery("from Idioma a where a.desc_idioma like :desc_idioma");
	//Seta o parametro de consulta
	q.setParameter("desc_idioma", "%"+desc_idioma+"%");
	//Joga o resultado da consulta dentro de uma list
	List<Idioma> idiomas = q.list();
	return idiomas;
}	

}

package entidades;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Idioma {
@Id
@GeneratedValue
private int cd_idioma;
private String desc_idioma;

public int getCd_idioma() {return cd_idioma;}
public String getDesc_idioma() {return desc_idioma;}

public void setCd_idioma(int cd_idioma) {
	this.cd_idioma = cd_idioma;
}
public void setDesc_idioma(String desc_idioma) {
	this.desc_idioma = desc_idioma;
}

}

package util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static SessionFactory factory;

static {
	Configuration configuration = new AnnotationConfiguration();
	configuration.configure();
	
	factory = configuration.buildSessionFactory();		
}

public static Session getSession() {
	return factory.openSession();
}

}

package util;

import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public class SessionUtil {

private static ResourceBundle bundle = ResourceBundle.getBundle("messages", 
		FacesContext.getCurrentInstance().getViewRoot().getLocale());	

public static void addErrorMessage(String msg) {
	msg = bundle.getString(msg);
	FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
	FacesContext fc = FacesContext.getCurrentInstance();
	fc.addMessage(null, facesMsg);
}

public static void addSuccessMessage(String msg) {
	msg = bundle.getString(msg);
	FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
	FacesContext fc = FacesContext.getCurrentInstance();
	fc.addMessage("SuccessInfo", facesMsg);
}

}

–FACES CONFIG–

<?xml version="1.0" encoding="UTF-8"?>




idiomaBean

controle.IdiomaBean

session



listaIdioma

/listaIdioma.jsp


alteraIdioma

/cadastroIdioma.jsp





cadastroIdioma

/cadastroIdioma.jsp


cancelaIdioma

/listaIdioma.jsp





listaIdioma

/listaIdioma.jsp


novoIdioma

/cadastroIdioma.jsp





MenuPrincipal

/MenuPrincipal.jsp


cadastroIdioma

/cadastroIdioma.jsp





cadastroIdioma

/cadastroIdioma.jsp


menuPrincipal

/MenuPrincipal.jsp


–WEB XML–

<?xml version="1.0" encoding="UTF-8"?> Projeto index.html index.htm index.jsp default.html default.htm default.jsp org.richfaces.SKIN deepMarine javax.faces.STATE_SAVING_METHOD server Ajax4jsf Filter ajax4jsf org.ajax4jsf.Filter ajax4jsf Faces Servlet REQUEST FORWARD INCLUDE Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet /faces/* *.jsf

–JSP–
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j” %>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich” %>
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pageEncoding=“ISO-8859-1”%>

Cadastro de Idiomas

	<h:panelGrid columns="2">
	<h:outputText value="Descrição: "></h:outputText>
	<h:inputText id="desc_idioma" value="#{idiomaBean.idioma.desc_idioma}" size="50" required="true"></h:inputText>
	<h:message for="Desc_idioma" style="color: darkred"></h:message>		
	</h:panelGrid>		
	
	<h:commandButton value="Salvar" action="#{idiomaBean.salvar}"/>
	<h:commandButton value="Cancelar" action="cancelaIdioma" immediate="true"></h:commandButton>
	<h:commandButton value="Voltar" action="menuPrincipal" immediate="true"></h:commandButton>
</h:form>

</f:view>

Oi amigos, Alguem pode me ajudar?

Amigo leia antes http://www.guj.com.br/posts/list/50115.java

Acredito que você deve colocar seu cód na formatação correta; pois fica muito difícil encontrar problemas nesta formatação.