Spring 3.2 - Tentando aprender =/

Galera, estou com um projeto que estou fazendo para dar uma reciclada em meus conhecimentos. Pois bem. Comprei um livro que só me deixou dúvidas, tentei seguir sozinho e me senti menos perdido que através do livro (Java Na web Com JSF, Spring e netbeans 6)
Porém estou com dificuldades…
Vamos lá
Não consigo com que a classe abaixo “UsuarioFacade” recebe a Injeção de uma instancia da classe “UsuarioDao” na variavel “usuarioDao” conforme a classe abaixo (Quando ele tenta acessar usuarioDao da Null Pointer, ou seja, não conseguiu receber a instancia da classe via DI:

package facade;

import dao.UsuarioDao;
import dominio.Usuario;
import java.util.List;


public class UsuarioFacade {
    
    private UsuarioDao usuarioDao;
    
    /** Creates a new instance of UsuarioFacade */
    public UsuarioFacade() {
    }
    
    public Usuario gravar(Usuario usuario) {
        return usuarioDao.gravar(usuario);
    }
    
    public void excluir(Usuario usuario) {
        usuarioDao.excluir(usuario);
    }
    
    public Usuario carregar(Integer id) {
        return usuarioDao.carregar(id);
    }
    
    public List obterTodos() {
        return usuarioDao.obterTodos();
    }
    
    public List obterPorNome(String nome) {
        return usuarioDao.obterPorNome(nome);
    }
    
    public List obterPorLogin(String login) {
        return usuarioDao.obterPorLogin(login);
    }
    
    public Usuario obterPorLoginSenha(String login, String senha) {
        return usuarioDao.obterPorLoginSenha(login, senha);
    }
    
    public UsuarioDao getUsuarioDao() {
        return usuarioDao;
    }
    
    public void setUsuarioDao(UsuarioDao usuarioDao) {
        this.usuarioDao = usuarioDao;
    }
}

Eis agora o applicationContext.xml

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

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Configurador que substitui os marcadores ${...} com os valores definidos no arquivo de properties -->
    <!-- (in this case, JDBC-related settings for the dataSource definition below) -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:/jdbc.properties"/>
    </bean>
    
    <!-- Local C3P0 DataSource que trabalha em qualquer ambiente, em ambientes de produção use jndi -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driverClassName}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    
    <!-- JPA EntityManagerFactory -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true"/>
                <property name="generateDdl" value="false"/>
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
            </bean>
        </property>
    </bean>
    
    <!-- Transaction manager para um JPA EntityManagerFactory simples (alternativa ao JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    
    <!-- PostProcessors para realizar injeção de recursos de acordo com a especificação JPA (@PersistenceContext, @PersistenceUnit). -->
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
    
    <!-- PostProcessors para realizar a conversão de exceções nas classes @Repository (das exceções nativas como JPA PersistenceExceptions to Spring's DataAccessException). -->
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    
    <!-- Será automaticamente transacional graças ao @Transactional. EntityManager irá ser auto-injetado graças ao @PersistenceContext. PersistenceExceptions irá ser auto-convertido graças ao @Repository. -->
    <bean id="usuario" class="dominio.Usuario" scope="session" />
    <bean id="usuarioDao" class="dao.UsuarioDao" />
    <bean id="usuarioFacade" class="facade.UsuarioFacade">
        <property name="usuarioDao" ref="usuarioDao" />
    </bean>
    
    <bean id="contato" class="dominio.Contato" scope="session" />
    <bean id="contatoDao" class="dao.ContatoDao" />
    <bean id="contatoFacade" class="facade.ContatoFacade">
        <property name="contatoDao" ref="contatoDao" />
    </bean>
    
    <bean id="endereco" class="dominio.Endereco" scope="session" />
    <bean id="enderecoDao" class="dao.EnderecoDao" />
    <bean id="enderecoFacade" class="facade.EnderecoFacade">
        <property name="enderecoDao" ref="enderecoDao" />
    </bean>
    
    <bean id="meioContato" class="dominio.MeioContato" scope="session" />
    <bean id="meioContatoDao" class="dao.MeioContatoDao" />
    <bean id="meioContatoFacade" class="facade.MeioContatoFacade">
        <property name="meioContatoDao" ref="meioContatoDao" />
    </bean>
    
    <bean id="sessionFactory"
    	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    	<property name="configLocation"
    		value="classpath:hibernate.cfg.xml">
    	</property>
    </bean>
</beans> 

Obs: applicationContext está na pasta: Projeto/src

jdbc.properties:

jdbc.driverClassName= com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/agenda
jdbc.username=root
jdbc.password=senhaUltraSecreta

Agora a classe de testes que utilizo para verificar a implementação acima

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.util.List;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import dominio.Usuario;
import facade.UsuarioFacade;

/**
 *
 * @author Yuri
 */
public class UsuarioFacadeTeste {
    
    private ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    public UsuarioFacadeTeste() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
         
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    /**
     * Test of gravar method, of class UsuarioFacade.
     */
    @Test
    public void gravar() {

        Usuario usuarioTeste = new Usuario();
        usuarioTeste.setLogin("guest");
        usuarioTeste.setNome("guest");
        usuarioTeste.setSenha("guest");
        
        System.out.println("gravar usuário");
        
        UsuarioFacade instance =(UsuarioFacade)context.getBean("usuarioFacade");
        Usuario result = instance.gravar(usuarioTeste);
        
        try {
            assertNotNull(result.getIdUsuario());
        } catch (AssertionError e){
            fail("Falhou a gravação de usuário.");
        }

    }

    /**
     * Test of excluir method, of class UsuarioFacade.
     */
    @Test
    public void excluir() {
        System.out.println("excluir");
        Usuario usuario = null;
        UsuarioFacade instance = new UsuarioFacade();
        instance.excluir(usuario);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of carregar method, of class UsuarioFacade.
     */
    @Test
    public void carregar() {
        System.out.println("carregar");
        Integer id = null;
        UsuarioFacade instance = new UsuarioFacade();
        Usuario expResult = null;
        Usuario result = instance.carregar(id);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of obterTodos method, of class UsuarioFacade.
     */
    @Test
    public void obterTodos() {
        System.out.println("obterTodos");
        UsuarioFacade instance = new UsuarioFacade();
        List expResult = null;
        List result = instance.obterTodos();
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of obterPorNome method, of class UsuarioFacade.
     */
    @Test
    public void obterPorNome() {
        System.out.println("obterPorNome");
        String nome = "";
        UsuarioFacade instance = new UsuarioFacade();
        List expResult = null;
        List result = instance.obterPorNome(nome);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of obterPorLogin method, of class UsuarioFacade.
     */
    @Test
    public void obterPorLogin() {
        System.out.println("obterPorLogin");
        String login = "";
        UsuarioFacade instance = new UsuarioFacade();
        List expResult = null;
        List result = instance.obterPorLogin(login);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of obterPorLoginSenha method, of class UsuarioFacade.
     */
    @Test
    public void obterPorLoginSenha() {
        System.out.println("obterPorLoginSenha");
        String login = "";
        String senha = "";
        UsuarioFacade instance = new UsuarioFacade();
        Usuario expResult = null;
        Usuario result = instance.obterPorLoginSenha(login, senha);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of getUsuarioDao method, of class UsuarioFacade.
     */
    

}

Peço encarecidamente, se alguem tiver uma luz ai! Fico mt agradecido. Pois com o Livro que citei, já estou revoltado. Como publicam um livro sendo que nem o exemplo passo-a-passo fornecido não funciona? Coisa de doido rsrsrs.

E ai amigo, td tranquilo? Seguinte, a forma com que estais fazendo está muito arcaica e é sujeita a dar enormes problemas.

Tem um tutorial aqui : http://www.mkyong.com/spring/maven-spring-hibernate-annotation-mysql-example/
que explica como fazer isso com Maven e annotations, que fica bem mais limpo.

Caso também se interesse, irei publicar até amanha um post no meu site de como fazer isso de uma forma mais clara e em portugues hehe, e ainda vou ensinar como fazer um Super DAO Generico todo gerenciado pelo spring.

Maravilha!
Vou tentar executar esse tutorial ai. Mas assim que vc publicar em seu site, me passa o endereço para eu conferir
Alias, me passe o endereço para eu conferir isso e mais outras coisas
Obrigado! :smiley:

O endereço ta na minha assinatura, la ja postei como configurar um projeto pronto com maven + Primefaces + JSF 2 + Hibernate 4.1 + Spring. Abração

Opa! Eu denovo!
Pode me tirar uma dúvida?
Nesse link que vc me passou ele usa o Maven. Instalei o 2.2.0 e estou seguindo os passos
Executei o comando svn generate:archetype
Porém ele me retornou mt projetos (base) e pediu para escolher um.
Escolhi o 15, conforme diz lá a page

E:\workspace>mvn archetype:generate
[INFO] Scanning for projects...
...
Choose a number:  
(1/2/3....) 15: : 15
...
Define value for groupId: : com.mkyong.common
Define value for artifactId: : HibernateExample
Define value for version:  1.0-SNAPSHOT: :
Define value for package:  com.mkyong.common: : com.mkyong.common
[INFO] OldArchetype created in dir: E:\workspace\HibernateExample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

Porém o 15, não tem nada a ver com o projeto ai de Hibernate e talz. Qual devo escolher? Ele retorna mais de 700 tipos.
Obrigado!

Amigo, escolhe esse: ?org.apache.maven.archetypes? onde o artifact id dele é softeu-archetype-jsf.

Abaixo segue o link domeu tutorial de como arrumar o projeto pra preparar para as tecnologias descritas. Eu particulamente não gosto da forma com que o MKyong gera a estrutura maven dele, tendo o eclipse para nos auxiliar, podemos com 3 clicks criar de uma forma bem mais facil. Caso queira, leia o meu tutorial, abraços !

http://heyxampis.com/2013/03/23/configurando-um-projeto-no-maven-com-jsf-2-1-primefaces-3-5-hibernate-4-1-e-spring-3-2/