Help - Struts1 + Spring

Amigos, estou tentando integrar Struts 1 com o Spring, demorei uns dias, porem ontem consegui mas ainda estou com algums problemas, vou postar o codigo aqui e no final eu posto as duvidas, espero que alguem possa me ajudar, segue:

Web.Xml

[code]
action
org.apache.struts.action.ActionServlet

config
/WEB-INF/struts-config/struts-config.xml

1


action
*.do

<!-- Inicialização do Contexto do Spring  -->

<listener>
	<display-name>context</display-name>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>[/code]

applicationContext.xml

[code]

<context:annotation-config/>
<context:component-scan base-package="br"/>
<aop:aspectj-autoproxy/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
<property name="dataSource">
 <ref local="c3p0DataSource"/>
</property>
 <property name="annotatedClasses">
	    <list>
 	        <value>br.com.controlefuncionario.entity.TbConfiguracao</value>
 	        <value>br.com.controlefuncionario.entity.TbEmpresa</value>
 	        <value>br.com.controlefuncionario.entity.TbFeriado</value>
 	        <value>br.com.controlefuncionario.entity.TbFuncionario</value>
 	        <value>br.com.controlefuncionario.entity.TbHistoricoProjeto</value>
 	        <value>br.com.controlefuncionario.entity.TbPrioridade</value>
 	        <value>br.com.controlefuncionario.entity.TbProjeto</value>
 	        <value>br.com.controlefuncionario.entity.TbRendimentoFuncionario</value>
 	     </list>
	      
	   </property>

	<property name="hibernateProperties">
		<props>
		    <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
			<prop key="hibernate.connection.autocommit">false</prop>
		</props>
    </property>

</bean>

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="org.postgresql.Driver"/>
	<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/db_controle_funcionario"/>
	<property name="user" value="postgres"/>
	<property name="password" value="dna44100"/>
    <property name="initialPoolSize" value="5"/>
    <property name="minPoolSize" value="5"/>
    <property name="maxPoolSize" value="15"/>
    <property name="checkoutTimeout" value="1000"/>
    <property name="maxStatements" value="50"/>
    <property name="testConnectionOnCheckin" value="true"/>
    <property name="idleConnectionTestPeriod" value="60"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory"/>
</bean>[/code]

struts-config.xml

[code]

<form-beans>

</form-beans>

<action-mappings>
	<action path="/empresa" type="br.com.controlefuncionario.action.EmpresaAction"
		name="EmpresaAction" scope="request" input="empresa.do?userAction=iniciaEmpresa"
		parameter="userAction" unknown="false" validate="false">
		<forward name="iniciaEmpresa" path="/jsp/empresa/cadastraAlteraEmpresa.jsp"
			redirect="false" />
		<forward name="consulta" path="/jsp/agenda/consulta.jsp"
			redirect="false" />
	</action>
</action-mappings>

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
	<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
</plug-in>

[/code]

EmpresaAction.java

[code]

public class EmpresaAction extends ActionSupport {

private EmpresaService empresaService;
private WebApplicationContext ctx;
public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
	try {
		//System.out.println("aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
		//EmpresaForm empresaForm = (EmpresaForm) actionForm;
		EmpresaForm empresaForm = new EmpresaForm();
		empresaForm.setCdCepEmpresa("adsadas");
		empresaForm.setNmEmpresa("nome");
		empresaForm.setNmContatoEmpresa("aeeeeeeeeeeeee");
		ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
		empresaService = (EmpresaService) ctx.getBean("empresaService");			
		empresaService.cadastraEmpresa(empresaForm);
		//System.out.println( "aeeaeaeae");
	//	empresaService.cadastraEmpresa(null);

		return (mapping.findForward("iniciaEmpresa"));
	} catch (Exception e) {
		request.setAttribute("urlFecharErro","agenda.do?userAction=iniciaPesquisa");
		e.printStackTrace();
		throw new Exception(e);
	}
}

public ActionForward cadastrarEmpersa(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
	
	EmpresaForm empresaForm = (EmpresaForm) actionForm;
	new EmpresaService().cadastraEmpresa(empresaForm);
	return (mapping.findForward("empresaCadastrada"));

}

public ActionForward alterarrEmpersa(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {

	EmpresaForm empresaForm = (EmpresaForm) actionForm;
	new EmpresaService().alterarEmpresa(empresaForm);
	return (mapping.findForward("empresaAlterada"));

}[/code]

EmpresaService.java

[code]

@Component
public class EmpresaService {

@Autowired
private EmpresaDAO empresaDAO;

public void cadastraEmpresa(EmpresaForm empresaForm){
	//cadastrar Empresa
	new EmpresaDAO().save(empresaForm.getEntityEmpresa());
}

public void alterarEmpresa(EmpresaForm empresaForm){
	//Alterar Empresa
	new EmpresaDAO().update(empresaForm.getEntityEmpresa());
}

public List<EmpresaForm> listarEmpresas(){
	//Listar todas Empresas
	return null;
}

public EmpresaForm getEmpresaById(int cdEmpresa){
	
	//Retorna empresa por id
	
	return null;
}

[/code]

EmpresaDAO.java

[code]Service
public class EmpresaDAO {

private HibernateTemplate hibernateTemplate;

@Autowired
public void setHibernateTemplate(SessionFactory sessionFactory) {
    this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}


public void save(TbEmpresa empresa){
	System.out.println("aeeeeeeeee");
	hibernateTemplate.save(empresa);
}

public void update(TbEmpresa empresa){
	
}[/code]

Otimo, agora eu estou com 2 problemas,

1º Ele não esta carregando a minha hibernateTemplate, e o engracado e que se eu rodar em modo debug, e colocar um breakpoint no meu setHibernateTemplate, ele passa la, injeta a sessionFactory, porem quando eu clico no meu botao para submitar o meu formulario, ele nao esta injetando. dentro do Service ele injeta o Dao tranquilo, porem dentro do DAO nao injeta o hibernateTemplate, alguem sabe o pq?

2º Antes, no meu formulario eu passava pelo hidden userAction o metodo que eu queria executar da minha classe EmpresaAction, porem dessa forma que eu integrei o Struts nao consigo mais, tenho que obrigatoriamente ter o metodo execute na minha EmpresaAction, tem que ser assim mesmo ou alguma coisa eu nao estou fazendo certo para que eu possa selecionar qual metodo eu quero utiliza??

obrigado