Problema ao usar Autowired no ManagedBean [NullPointerException]

Estou criando uma aplicação de exemplo que está fazendo login. Estou fazendo tudo com annotations. Mas ao usar o @AutoWired no ManagedBean, a aplicação

@ManagedBean(name = "LoginBean")
@Controller
@Scope(value = "request")
public class LoginBean {

	@Autowired
	private UsuarioBO usuarioBO;

        private String usuario;
        private String senha;

        public String entrar() {
          Usuario usuarioLogado = getUsuarioBO().getUsuarioPorUsuarioSenha(usuario,senha);
          if (usuarioLogado!=null)
              return "home";
          else
              return "login";
        }

        public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	public UsuarioBO getUsuarioBO() {
		return usuarioBO;
	}

	public void setUsuarioBO(UsuarioBO usuarioBO) {
		this.usuarioBO = usuarioBO;
	}

}

O bean UsuarioBO está assim:

@Component("UsuarioBO")
public class UsuarioBO extends GenericBO {

	@Autowired
	private UsuarioDAO usuarioDAO;
	
	public UsuarioBO() {
		// TODO Auto-generated constructor stub
	}

	public Usuario getUsuarioPorUsuarioSenha(String usuario, String senha) {

		// Converte senha para formato md5
		senha = HashUtils.gerarHash(senha, HashUtils.HASH_ALGORITHM_MD5);		
		return getUsuarioDAO().getUsuarioPorUsuarioSenha(usuario, senha);
	}

	public UsuarioDAO getUsuarioDAO() {
		return usuarioDAO;
	}

	public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
		this.usuarioDAO = usuarioDAO;
	}
}

O dao de usuário está assim:

@Component("UsuarioDAO")
public class UsuarioDAO extends GenericDAO {
	
	public UsuarioDAO() {
		// TODO Auto-generated constructor stub
	}
	
	@Autowired
	public void init(SessionFactory factory) {
	    setSessionFactory(factory);
	}
	
	public Usuario getUsuarioPorUsuarioSenha(String usuario, String senha) {
		Query q = getNamedQuery("getUsuarioPorUsuarioSenha");
		q.setParameter("paramUsuario", usuario);
		q.setParameter("paramSenha", senha);
		return (Usuario) q.uniqueResult();
	}	
}

Já usuário é uma entidade mapeada do bd. Finalmente, o meu application context está configurado da seguinte maneira:

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

	<context:component-scan base-package="br.com.pditec.templatespringjpajsfprime" />
	<context:annotation-config />

 	
	<!-- Scans within the base package of the application for @Components to configure as beans -->
	<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:db.properties" />
	</bean>

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan" value="br.com.pditec.templatespringjpajsfprime.persistence.model"/>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
				<prop key="hibernate.c3p0.acquire_increment">5</prop>
				<prop key="hibernate.c3p0.idle_test_period">100</prop>
				<prop key="hibernate.c3p0.max_size">100</prop>
				<prop key="hibernate.c3p0.max_statements">0</prop>
				<prop key="hibernate.c3p0.min_size">10</prop>
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
			</props>
		</property>
	</bean>

	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${db.driver}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<property name="password" value="${db.password}" />
	</bean>
	 
	<tx:annotation-driven />
	
</beans>

O servidor inicia normalmente (sem gerar nenhum erro), mas quando eu abro a tela e clico no login, ele gera a seguinte excecao:

RESUMINDO: o usuarioBO que está sendo injetado dentro de LoginBean está NULL, por isso ele gera o erro. Sendo assim, constato que meus beans não estão sendo inicializados.

Alguém poderia me dar uma luz?

Estou usando Java 7, Spring 3.0.5, JSF 2, Hibernate.

Como está a configuração do faces-config?

Obrigado pelo retorno! Estou precisando muito de ajuda! Abaixo o faces-config:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">

	<application>
		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
	    <variable-resolver>org.springframework.web.jsf.SpringBeanVariableResolver</variable-resolver>
	   
		<locale-config>
			<default-locale>pt_BR</default-locale>
		</locale-config>

		<message-bundle>messages</message-bundle>
	</application>

	<navigation-rule>

		<navigation-case>
			<from-outcome>login</from-outcome>

			<to-view-id>
				pages/paginaLogin/paginaLogin.xhtml</to-view-id>
			<redirect />
		</navigation-case>

		<navigation-case>
			<from-outcome>home</from-outcome>

			<to-view-id>
				pages/home/home.xhtml</to-view-id>
			<redirect />
		</navigation-case>

		<navigation-case>
			<from-outcome>manterUsuario</from-outcome>

			<to-view-id>
				pages/manterUsuario/manterUsuario.xhtml</to-view-id>
			<redirect />
		</navigation-case>
	</navigation-rule>

	<lifecycle>
		<phase-listener>br.com.pditec.templatespringjpajsfprime.listener.AuthorizationListener</phase-listener>
	</lifecycle>

</faces-config>

Já tentou colocar o path completo do pacote a ser escaneado?
Baixa o projetinho no final desta página e dá uma conferida nas configurações.

http://forum.springsource.org/showthread.php?86577-Spring-3-JSF-2

Porque os managed beans também não estão com @Autowired e sim com @ManagedBean ?

Talvez o nullpointer aconteça, pois o jsf injeta o managedBean e você está tentando lá que o spring injete o campo.

Acho que o spring só injeta campos que venham de component. Não tenho certeza.

[quote=bsl.lacerda]Já tentou colocar o path completo do pacote a ser escaneado?
Baixa o projetinho no final desta página e dá uma conferida nas configurações.

http://forum.springsource.org/showthread.php?86577-Spring-3-JSF-2 [/quote]

[quote=lele_vader]Porque os managed beans também não estão com @Autowired e sim com @ManagedBean ?

Talvez o nullpointer aconteça, pois o jsf injeta o managedBean e você está tentando lá que o spring injete o campo.

Acho que o spring só injeta campos que venham de component. Não tenho certeza.[/quote]

Consegui encontrar o erro. A anotação @ManagedBean não pode ser da classe “javax.faces.bean.ManagedBean”, mas deve ser “javax.annotation.ManagedBean”. Como eu havia feito essa confusão na anotação, gerou o erro. O problema é encontrar esse tipo de erro.

Mas eu me deparei com outro erro:

Este erro é causado quando eu chamo o home.xhtml (home.jsf). Veja os arquivos que o programa chama abaixo:

home.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:c="http://java.sun.com/jstl/core"
	xmlns:p="http://primefaces.org/ui"
	template="WEB-INF/templates/templateLogado.xhtml">

	<ui:define name="area_central_conteudo">	
	</ui:define>

</ui:composition>

templateLogado.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:c="http://java.sun.com/jstl/core"
	xmlns:p="http://primefaces.org/ui"
	template="WEB-INF/templates/templateGeral.xhtml">

    <ui:define name="info_login">
	
		<h:form id="formLogin">
			
			<h:outputText value="Você está logado como "/>
			<h:outputText value="[#{LoginBean.usuarioLogado()}] " style="font-weight:bold;"/>
			
			<br/>
			
			<p:commandLink id="logout" action="#{LoginBean.sair}">  
		        <h:outputText value="Sair" />  
		    </p:commandLink> 
			
		</h:form>
		
	</ui:define>

	<ui:define name="menu_conteudo">

		<h:form>
			<p:menubar autoDisplay="true">

				<p:submenu label="Usuários">
					<p:menuitem value="Cadastro" action="#{manterUsuarioBean.Iniciar}" />
				</p:submenu>
				
				<p:submenu label="Unidades Consumidoras">
					<p:menuitem value="Listar" action="#{manterUnidadeConsumidoraBean.iniciar}"></p:menuitem>
				</p:submenu>
			</p:menubar>
		</h:form>

	</ui:define>

</ui:composition>

templateGeral.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">

	<h:head>
		<title>Aplicacao - 1.0.0</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/style.css" />  
  	</h:head>
  
  	<h:body style="custom">
	
		<p:layout fullPage="true">
		 
			<!-- NORTE -->
		 	<p:layoutUnit position="north" size="130" styleClass="ui-top">
		 	
		 		<p:layout>
		 			<p:layoutUnit position="west" size="150" style="border:0px;"/>
		 			<p:layoutUnit position="east" size="150" style="border:0px;"/>
		 			
		 			<p:layoutUnit position="center" style="border:0px;">
		 			
		 				<p:layout>
		 				   
		 					<p:layoutUnit position="west" size="400"  style="border:0px;">
					 			<h:graphicImage value="/resources/images/logo.gif"></h:graphicImage>
					 		</p:layoutUnit>
					 		 
					 		<p:layoutUnit position="east" size="400" style="border:0px; vertical-align:bottom; text-align:right">
					 		    <ui:insert name="info_login"/>  <!-- INSERIR INFO LOGIN AQUI -->
					 		</p:layoutUnit>
					 		
					 		<p:layoutUnit position="center"  style="border:0px;"/>
			 		
		 				</p:layout>
		 			</p:layoutUnit>
		 		</p:layout>
		 		
		 	</p:layoutUnit>	
		
			
			<!-- OESTE -->
			<p:layoutUnit position="west" size="150"  style="border:0px;">
		 	</p:layoutUnit>
			
		
		    <!-- CENTRO -->
			<p:layoutUnit position="center"  style="border:0px;">
		 		<ui:insert name="menu_conteudo"/>
		 		<ui:insert name="area_central_conteudo" />
		 	</p:layoutUnit>
		
		 	
		 	<!-- LESTE -->
			<p:layoutUnit position="east" size="150" style="border:0px;">
		 	</p:layoutUnit>
		
		 	
		 	<!-- SUL -->
		 	<p:layoutUnit position="south" size="40" styleClass="ui-bottom">
		 		<h:outputLabel value="Pditec - Rua Alvarenga Peixoto, 683 - 4º Andar - Lourdes - CEP: 30180-120 - Belo Horizonte - Minas Gerais - Brasil"/> <br/>
		 		<h:outputLabel value="Tel: +55 (31) 2512-8248"/>
		 	</p:layoutUnit>
	
		</p:layout>

	</h:body>
  
</html>

Vocês têm uma ideia do que pode ser???

Tira o web-inf do caminho o template.

template=“WEB-INF/templates/templateGeral.xhtml”>