Spring - Error creating bean with name && Could not autowire field

Olá,

estou tentando desenvolver minha primeira aplicação com Spring + Spring MVC + Hibernate…

Estou apanhando aqui com essas duas exceptions citadas no título… Acho que as duas estão meio ‘interligadas’…
aí vai:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grupoController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.noronha.myFinancesWeb.database.service.GrupoService com.noronha.myFinancesWeb.controller.GrupoController.grupoService; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.hibernate3.LocalSessionFactoryBean] for bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.LocalSessionFactoryBean
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)

Vamos ao que eu fiz:

1- Criei o hibernate.cfg.xml na pasta scr

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

	<session-factory>

		<property name="connection.url">jdbc:mysql://localhost/myfinancesweb</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>


		<!-- thread is the short name for org.hibernate.context.ThreadLocalSessionContext 
			and let Hibernate bind the session automatically to the thread -->
		<property name="current_session_context_class">thread</property>

		<!-- this will show us all sql statements -->
		<property name="hibernate.show_sql">true</property>

		<!-- this will create the database tables for us -->
		<property name="hibernate.hbm2ddl.auto">update</property>



		<mapping class="com.noronha.myFinancesWeb.model.Categoria" />
		<mapping class="com.noronha.myFinancesWeb.model.Conta" />
		<mapping class="com.noronha.myFinancesWeb.model.Grupo" />
		<mapping class="com.noronha.myFinancesWeb.model.Pagamento" />


	</session-factory>

</hibernate-configuration>

Aqui está o meu spring-servlet.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" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<context:component-scan base-package="com.noronha.myFinancesWeb" />
	<mvc:resources location="/resources/" mapping="/resources/**"/>
	<mvc:annotation-driven />

	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    </bean>
    
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
</beans>

Agora meu Controller onde quero injetar o service:

@Controller
@RequestMapping("/grupo/*")
public class GrupoController {
	
	@Autowired
	private GrupoService grupoService;
		
	
	@RequestMapping("index")
	public String index(){
		return "redirect:grupo/search/1";
	}
	
	@RequestMapping("search/{page}")
	public ModelAndView search(@PathVariable int page){		
		ModelAndView mv = new ModelAndView("grupo/search");
		mv.addObject(page);
		mv.addObject("itens",grupoService.listar(new Grupo(), page));
		return mv;
	}

O meu service:

@Service
public class GrupoService extends BaseService<Grupo, Integer>{

	public GrupoService(BaseDao<Grupo, Integer> baseDao) {
		super(baseDao);
	}

}

O meu GrupoDao:


@Component
public class GrupoDao extends BaseDao<Grupo, Integer>{

	@Autowired
	SessionFactory sessionFactory;
	
	public GrupoDao(SessionFactory sessionFactory) {
		super(Grupo.class, sessionFactory);
	}

	@Override
	protected Criteria setup(Grupo entity) {
		Criteria criteria = super.getSession().createCriteria(entity.getClass());

		if (entity.getId() != 0) {
			criteria.add(Restrictions.eq("id", entity.getId()));
		}

		if (StringUtil.nulaOuVazia(entity.getDescricao())) {
			criteria.add(Restrictions.like("descricao", entity.getDescricao(), MatchMode.ANYWHERE));
		}

		return criteria;
	}

}

bom, acho que as classes genéricas /abstratas não precisam ser mostradas, mas se precisar é só falar que eu colo aqui.
Será que eu esqueci de algo? Alguma configuração?

Ahh, aproveitando o gancho, qual a diferença do @Component do VRaptor para o do Spring?

Abraços

O erro que está dando é que o Spring não consegue achar o org.springframework.orm.hibernate3.LocalSessionFactoryBean do Hibernate. Talvez seja problema de classpath.

Alternativamente, você pode da uma olhada nesta documentação: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-hibernate-straight

[quote=Bruno Laturner]O erro que está dando é que o Spring não consegue achar o org.springframework.orm.hibernate3.LocalSessionFactoryBean do Hibernate. Talvez seja problema de classpath.

Alternativamente, você pode da uma olhada nesta documentação: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-hibernate-straight[/quote]

Obrigado pela resposta.

Bom, estava com o Hibernate 4, e tinha colocado hibernate 3 na configuração…
Mas aí mudei para o 4 e continua com o mesmo projeto

java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.LocalSessionFactoryBean

fiz o build com o Maven, e o pom xml está assim:

	      <dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.0.1.Final</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>4.2.0.Final</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate.common</groupId>
			<artifactId>hibernate-commons-annotations</artifactId>
			<version>4.0.1.Final</version>
			<classifier>tests</classifier>
		</dependency>

		<dependency>
			<groupId>org.hibernate.javax.persistence</groupId>
			<artifactId>hibernate-jpa-2.0-api</artifactId>
			<version>1.0.1.Final</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>4.0.1.Final</version>
		</dependency>

		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.0.0.GA</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.4</version>
		</dependency>


		<!-- Spring 3 dependencies -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>