IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Bean autowired non reconnu [Framework]


Sujet :

Spring Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut Bean autowired non reconnu
    Bonjour,

    J'utilise Spring pour tester un DAO CapteurDaoImpl.

    L'interface DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Le package de ton component scan, est com.organisme.daoImpl et non pas como.organisme.dao.impl comme dans ton fichier de configuration XML.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Merci pour ta réponse.
    J'ai effectué le changement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <context:component-scan base-package="com.organisme.daoImpl" />
    Mais l'erreur ne change pas !

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Résolu.
    La cause est une erreur de frappe.
    Dans la classe mère de test j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "calsspath*:/applicationContext-dao.xml"
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "classpath*:/applicationContext-dao.xml"
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Framework] Instanciation de bean, @Autowired non complet
    Par LlufRuS dans le forum Spring
    Réponses: 6
    Dernier message: 24/11/2009, 14h20
  2. Réponses: 11
    Dernier message: 29/07/2009, 10h31
  3. Réponses: 0
    Dernier message: 22/07/2009, 16h31
  4. Réponses: 1
    Dernier message: 08/07/2009, 11h38
  5. Bean non reconnu
    Par Bryce de nyce dans le forum Struts 1
    Réponses: 9
    Dernier message: 16/12/2006, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo