Problemas com Spring

2 respostas
standart

Olá amigos, estou tentando conhecer o spring, mas infelizmente estou tendo muita dor cabeça. Criei um exemplo simples de apenas 2 classes.

package br.com.turion.dao;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.turion.model.Cliente;

@Component("clienteDAO")
public class ClienteDAO{

	
	private String verySimple = "Minha propriedade";

	public String getVerySimple() {
		return verySimple;
	}

	public void setVerySimple(String verySimple) {
		this.verySimple = verySimple;
	}
	
	public ClienteDAO(){}
	
	
	
}

A Classe que estou tentando fazer uso da injeção de dependência.

package br.com.turion.dao;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RunTimeClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:app-config.xml");
		
		ClienteDAO dao = (ClienteDAO) context.getBean("clienteDAO");
		
		System.out.println("Executando" + dao.getVerySimple());

	}

}

O meu app-config.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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context" 
	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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<mvc:annotation-driven />
  	
	<tx:annotation-driven />

	<context:annotation-config />
	
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="TurionPU" />
    </bean>
   
	<!-- Scans the classpath of this application for @Components to deploy as beans -->
	<context:component-scan base-package="*" />
	<!-- Configures the @Controller programming model -->
	
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    
	<!-- misc -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <property name="suffix" value=".jsp"/>
	</bean>

      
</beans>

O erro que está dando é sempre esse:

02/05/2012 07:17:33 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@32fb4f: startup date [Wed May 02 07:17:33 GMT-03:00 2012]; root of context hierarchy
02/05/2012 07:17:33 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@167d940: defining beans []; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'clienteDAO' is defined
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
	at br.com.turion.dao.RunTimeClass.main(RunTimeClass.java:14)

Já testei declarar o bean diretamente no xml, mas dá a mesma mensagem.

Já não sei mais o que posso fazer, já refiz várias vezes o mesmo exemplo e sempre dá esse erro.

Obrigado a todos

2 Respostas

drsmachado

Primeiro, o problema não deve ser com o Spring, mas com o foco que você está dando ao problema.
Note que a mensagem da exception diz qual o problemaNo bean named 'clienteDAO' is defined
Isto significa que no arquivo de configuração do Spring, que você nomeou como app-config.xml não existe nenhum bean cujo id é clienteDAO.
Logo, a configuração está errada.

standart

Olá caro drsmachado, obrigado por responder. Mas se eu entendi bem o que você quis dizer, eu preciso declarar o bean no meu app-config.xml. Só que como estou tentando declarar os beans via annotations acredito que eu preciso é declarar as tags que habilitam esse recurso que no caso seriam:

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

E isso já esta sendo feito conforme pode ver no arquivo, mas ainda assim eu segui o seu conselho e coloquei o bean diretamente no arquivo xml e desabilitei as tags de annotations e tirei a annotation da classe, mas o mesmo erro ocorre.

Fico no aguardo… abraços

drsmachado:
Primeiro, o problema não deve ser com o Spring, mas com o foco que você está dando ao problema.
Note que a mensagem da exception diz qual o problemaNo bean named 'clienteDAO' is defined
Isto significa que no arquivo de configuração do Spring, que você nomeou como app-config.xml não existe nenhum bean cujo id é clienteDAO.
Logo, a configuração está errada.

Criado 2 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 2
Participantes 2