Problemas em injetar implementação de uma interface usando Spring 2

Olá a todos,

Estou tendo problemas na tentativa de injetar uma implementação de uma interface com o spring 2, está dando o seguinte erro:

Mensagem de erro

INFO: Initializing Spring root WebApplicationContext
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
17/08/2007 17:15:40 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.rdcomp.dao.user.UserDAO]: Specified class is an interface
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.rdcomp.dao.user.UserDAO]: Specified class is an interface
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:51)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:756)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:721)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:384)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
17/08/2007 17:15:40 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
17/08/2007 17:15:40 org.apache.catalina.core.StandardContext start
SEVERE: Context [/rdcompJpa] startup failed due to previous errors
17/08/2007 17:15:40 org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
17/08/2007 17:15:40 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
17/08/2007 17:15:40 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
17/08/2007 17:15:40 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/46  config=null
17/08/2007 17:15:40 org.apache.catalina.startup.Catalina start
INFO: Server startup in 5487 ms

trecho do applicationContext.xml

	<!-- Todas as classes que serão injetadas em alguma interface --> 
	<bean id="userImpDAO" class="br.com.rdcomp.dao.user.userImp.UserImpDAO" />

	<!-- Todas interfaces que necessitam de injeção -->
    <bean id="userDAO" class="br.com.rdcomp.dao.user.UserDAO" autowire="byName">
    	<property name="userImpDAO" ref="userImpDAO" />
    </bean>

Alguém sabe oque pode estar acontecendo??

Muito obrigado.

Cara …

Vc não pode injetar uma interface:

teoricamente teria de ser:

public interface UserDAO {
 ...
}

public class UserDAOImpl implements UserDAO {
 ...
}

<bean id="userDAO" class="UserDAOImpl" autowire="byName">
   ...
</bean>

[]'s

mas eu não quero injetar a interface, e sim a implementação dessa interface…

public interface UserDAO {

...

}
public class UserImpDAO implements UserDAO{

...

}

quero injetar a UserImpDAO na UserDAO…

Ao invés de eu fazer um UserDAO userDao = new UserImpDAO(), gostaria de fazer um private UserDAO userDao, e deixar o spring injetar a implementação dela para mim…

abrçs

Quando o Spring sobe ele cria instâncias das classes que estiverem configuradas no atributo class das propriedades bean, entaum se vc configurar esse atributo apontando para uma interface ele não vai conseguir instanciar e sempre dará essa exceção, ok?

Se teu UserDao fosse uma classe funcionaria normalmente…