Bean autowired non reconnu
Bonjour,
J'utilise Spring pour tester un DAO CapteurDaoImpl.
L'interface DAO :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
package com.organisme.dao;
import java.util.List;
import com.organisme.model.capteur.Capteur;
/**
* Interface DAO de la gestion de persistance des objets Capteur.
*
*/
public interface CapteurDao extends GenericDao<Capteur> {
public Capteur getCapteur(Long id);
public List<Capteur> getAllCapteurs();
public void saveCapteur(Capteur c);
public void updateCapteur(Capteur c);
public void deleteCapteur(Capteur c);
} |
L'implémentation de l'interface :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
package com.organisme.daoImpl;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.organisme.dao.CapteurDao;
import com.organisme.model.capteur.Capteur;
/**
* Classe des objets DAO pour la gestion de la persistance des objets Capteur
*
*/
@Component(value = "capteurDao")
@Transactional
public class CapteurDaoImpl extends GenericDaoImpl<Capteur> implements
CapteurDao {
@Override
public void saveCapteur(Capteur c) {
this.persist(c);
}
@Override
public void updateCapteur(Capteur c) {
this.merge(c);
}
@Override
public void deleteCapteur(Capteur c) {
this.remove(this.merge(c));
}
@Override
public Capteur getCapteur(Long id) {
return this.get(id);
}
@Override
public List<Capteur> getAllCapteurs() {
return this.findAllRecords();
}
} |
La classe de test :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
package com.organisme.daoImpl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.organisme.dao.CapteurDao;
import com.organisme.model.capteur.Capteur;
import com.organisme.model.ressource.RessourceMaterielle.ETAT;
public class CapteurDaoImplTest extends AbstractDaoImplTest {
@Autowired
private CapteurDao capteurDao;
private final Capteur c1 = new Capteur();
private final Capteur c2 = new Capteur();
@Test
public void test() {
Date d = new Date();
c1.setMesure("5");
c1.setDateEtat(d);
c1.setDateMES(d);
c1.setEtat(ETAT.ARRET);
c1.setNom("C1");
c1.setId(1L);
c2.setMesure("6");
c2.setDateEtat(d);
c2.setDateMES(d);
c2.setEtat(ETAT.ARRET);
c2.setNom("C2");
c2.setId(2L);
capteurDao.saveCapteur(c1);
Capteur c = capteurDao.getCapteur(1L);
assertNotNull(
"Il y a eu un problème lors de la persistence en base de données.",
c);
assertEquals(
"Il y a eu un problème lors de la persistence en base de données.",
"C1", c.getNom());
capteurDao.saveCapteur(c2);
final List<Capteur> list = capteurDao.getAllCapteurs();
for (Capteur current : list) {
final String name = current.getNom();
assertTrue(
"Il y a eu un problème lors de la récupération à partir de la base de données.",
name.equals("C1") || name.equals("C2"));
}
c1.setNom("new C1");
capteurDao.updateCapteur(c1);
c = capteurDao.getCapteur(1L);
assertEquals(
"Il y a eu un problème lors de la mise à jour en base de données.",
c.getNom(), "new C1");
capteurDao.deleteCapteur(c2);
c = capteurDao.getCapteur(2L);
assertNull(
"Il y a eu un problème lors de la suppression de la base de données.",
c);
}
} |
La classe mère de test :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
package com.organisme.daoImpl;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration(locations = { "calsspath*:/applicationContext-dao.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class AbstractDaoImplTest {
} |
L'application context :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
<?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-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/tx http://www.springframework.org/schema/tx/spring-tx-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/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!-- définition de l'entity manager factory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
</property>
<property name="jpaProperties" ref="jpaProperties"/>
<property name="persistenceXmlLocation" value="classpath:persistence.xml"/>
</bean>
<!-- configuration de l'adapteur JPA -->
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false"/>
<property name="databasePlatform" value="${db.dialect}"/>
</bean>
<!-- configuration de la datasource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<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>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/db.properties</value>
</list>
</property>
</bean>
<util:properties id="jpaProperties">
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.NoCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
</util:properties>
<!-- gestion des transactions -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- activation de la configuration d'un comportement transactionnel en utilisant les annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- post-processors for all standard config annotations -->
<context:component-scan base-package="com.organisme.dao.impl" />
<context:annotation-config/>
</beans> |
J'obtiens cette erreur. Je ne c'est pas pourquoi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.organisme.daoImpl.CapteurDaoImplTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.organisme.dao.CapteurDao com.organisme.daoImpl.CapteurDaoImplTest.capteurDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organisme.dao.CapteurDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.organisme.dao.CapteurDao com.organisme.daoImpl.CapteurDaoImplTest.capteurDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organisme.dao.CapteurDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
... 26 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organisme.dao.CapteurDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:952)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:821)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 28 more |
Avez-vous des idées ?
Cordialement.