2011-10-27 24 views
36

Sto sviluppando una piccola applicazione Spring Java EE Hibernate ed è apparso un errore:
Error creating bean with name 'articleControleur': Injection of autowired dependencies failed;Iniezione delle dipendenze autowired non riuscita;

oct. 26, 2011 3:51:44 PM org.apache.catalina.core.ApplicationContext log 
Grave: StandardWrapper.Throwable 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleControleur': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.bd.service.ArticleService com.bd.controleur.ArticleControleur.articleService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.bd.service.ArticleService] 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:285) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 
at org.apache.catalina.core.StandardService.start(StandardService.java:519) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:581) 
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:289) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.bd.service.ArticleService com.bd.controleur.ArticleControleur.articleService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.bd.service.ArticleService] 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:502) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282) 
... 33 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.bd.service.ArticleService] 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:920) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474) 
... 35 more 

oct. 26, 2011 3:51:44 PM org.apache.catalina.core.StandardContext loadOnStartup 
Grave: La servlet /ExempleAchref a généré une exception "load()" 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.bd.service.ArticleService] 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:920) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 
at org.apache.catalina.core.StandardService.start(StandardService.java:519) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:581) 
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:289) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

Ed ecco la mia ArticleControleur controllo che contiene una funzione per il recupero degli elenchi di articoli:

package com.bd.controleur; 

    import java.util.HashMap; 
    import java.util.Map; 

    import org.springframework.beans.factory.annotation.Autowired; 
    import org.springframework.stereotype.Controller; 
    import org.springframework.web.bind.annotation.RequestMapping; 
    import org.springframework.web.servlet.ModelAndView; 

    import com.bd.service.ArticleService; 

    @Controller 
    @RequestMapping("/Article/GererArticle") 
    public class ArticleControleur { 

    @Autowired 
    ArticleService articleService; 

    public ModelAndView listarticle() { 

    Map<String, Object> model = new HashMap<String, Object>(); 
    model.put("articles", articleService.getAllArticles()); 

    // new ModelAndView("nom de la page jsp", model qui contient l'ensemble 
    // des beans que tu vas passer a cette page) 
    return new ModelAndView("GererArticle", model); 

    } 

    } 

Ed ecco il mio articoloServizio:

package com.bd.service; 

import java.util.Collection; 
import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

import com.bd.dao.ArticleDao; 
import com.bd.entity.Article; 

@Service 
public class ArticleServiceImp implements ArticleService { 

    @Autowired 
    private ArticleDao articledao; 



    @Override 
    public Article getArticleById(int articleId) { 
     // TODO Auto-generated method stub 
     return articledao.getById(articleId); 
    } 

    @Override 
    public void saveArticle(Article article) { 
     // TODO Auto-generated method stub 
     articledao.save(article); 

    } 

    @Override 
    public void deleteArticle(Article article) { 
     // TODO Auto-generated method stub 
     articledao.delete(article); 
    } 

    @Override 
    public List<Article> getAllArticles() { 
     // TODO Auto-generated method stub 
     return articledao.getAll(); 
    } 

} 

E qui è il mio contesto di applicazione:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
    - Application context containing authentication, channel 
    - security and web URI beans. 
    - 
    - Only used by "filter" artifact. 
    - 
    --> 

<b:beans xmlns:b="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:tx="http://www.springframework.org/schema/tx" 



    xsi:schemaLocation="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-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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     "> 


    <!-- Auto-detect components --> 
    <context:component-scan base-package="com.bd.entity"/> 


</b:beans> 
+0

Come stai configurando autowiring nel contesto di applicazione? Puoi per favore pubblicare la parte pertinente del tuo 'applicationContext.xml'? –

risposta

49

L'errore mostra che com.bd.service.ArticleService non è un bean registrato. Aggiungere i pacchetti in cui sono contenuti i fagioli che verranno autowired nel contesto di applicazione:

<context:component-scan base-package="com.bd.service"/> 
<context:component-scan base-package="com.bd.controleur"/> 

In alternativa, se si desidera includere tutti i pacchetti secondari in com.bd:

<context:component-scan base-package="com.bd"> 
    <context:include-filter type="aspectj" expression="com.bd.*" /> 
</context:component-scan> 

Come nota a margine, se utilizzando Spring 3.1 o versioni successive, è possibile sfruttare l'annotazione @ComponentScan, in modo da non dover utilizzare alcuna configurazione xml per Component-Scan. Usalo in combinazione con @Configuration.

@Controller 
@RequestMapping("/Article/GererArticle") 
@Configuration 
@ComponentScan("com.bd.service") // No need to include component-scan in xml 
public class ArticleControleur { 

    @Autowired 
    ArticleService articleService; 
    ... 
} 

Si potrebbe trovare questa primavera nella sezione approfondita sulla Autowiring utile.

+2

grazie lavoro – achref05

+0

In quale file devono essere aggiunte queste righe? –

+1

@Oleg nel file applicationContext.xml. Assicurati che la definizione dello spazio dei nomi per il prefisso 'context' sia inclusa come spiegato [qui] (http://stackoverflow.com/q/16673644/851811) –

2

Avete un fagiolo dichiarato nel file di contesto che ha un id di "articleService"? Credo che l'autowiring corrisponda all'ID di un bean nei file di contesto con il nome della variabile che si sta tentando di eseguire automaticamente.

0
public class Organization { 

    @Id 
    @Column(name="org_id") 
    @GeneratedValue 
    private int id; 

    @Column(name="org_name") 
    private String name; 

    @Column(name="org_office_address1") 
    private String address1; 

    @Column(name="org_office_addres2") 
    private String address2; 

    @Column(name="city") 
    private String city; 

    @Column(name="state") 
    private String state; 

    @Column(name="country") 
    private String country; 

    @JsonIgnore 
    @OneToOne 
    @JoinColumn(name="pkg_id") 
    private int pkgId; 

    public int getPkgId() { 
     return pkgId; 
    } 

    public void setPkgId(int pkgId) { 
     this.pkgId = pkgId; 
    } 

    public String getCountry() { 
     return country; 
    } 

    public void setCountry(String country) { 
     this.country = country; 
    } 

    @Column(name="pincode") 
    private String pincode; 

    @OneToMany(mappedBy = "organization", cascade=CascadeType.ALL, fetch = FetchType.EAGER) 
    private Set<OrganizationBranch> organizationBranch = new HashSet<OrganizationBranch>(0); 

    @Column(name="status") 
    private String status = "ACTIVE"; 

    @Column(name="project_id") 
    private int redmineProjectId; 

    public int getRedmineProjectId() { 
     return redmineProjectId; 
    } 

    public void setRedmineProjectId(int redmineProjectId) { 
     this.redmineProjectId = redmineProjectId; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public Set<OrganizationBranch> getOrganizationBranch() { 
     return organizationBranch; 
    } 

    public void setOrganizationBranch(Set<OrganizationBranch> organizationBranch) { 
     this.organizationBranch = organizationBranch; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAddress1() { 
     return address1; 
    } 

    public void setAddress1(String address1) { 
     this.address1 = address1; 
    } 

    public String getAddress2() { 
     return address2; 
    } 

    public void setAddress2(String address2) { 
     this.address2 = address2; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getState() { 
     return state; 
    } 

    public void setState(String state) { 
     this.state = state; 
    } 

    public String getPincode() { 
     return pincode; 
    } 

    public void setPincode(String pincode) { 
     this.pincode = pincode; 
    } 
} 

Si modifica la linea di PkgID private int nel cambiamento di tipo di dati int a nome della classe primitivo o di aggiungere annotazioni @autowired

Problemi correlati