2011-10-27 35 views
36

Tôi đang phát triển một ứng dụng Spring nhỏ Java EE Hibernate và một lỗi xuất hiện:
Error creating bean with name 'articleControleur': Injection of autowired dependencies failed;Tiêm phụ thuộc autowired thất bại;

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) 

Và đây là ArticleControleur điều khiển của tôi, trong đó có một chức năng cho việc khôi phục danh sách bài viết:

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); 

    } 

    } 

Và đây là bài viết của tôiService:

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(); 
    } 

} 

Và đây là ngữ cảnh ứng dụng của tôi:

<?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

How are you lập autowiring trong bối cảnh ứng dụng của bạn? Bạn có thể vui lòng đăng phần liên quan của 'applicationContext.xml' của bạn không? –

Trả lời

49

Lỗi cho thấy com.bd.service.ArticleService không phải là bean đã đăng ký. Thêm các gói mà bạn có đậu sẽ được autowired trong bối cảnh ứng dụng của bạn:

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

Ngoài ra, nếu bạn muốn bao gồm tất cả các gói con trong com.bd:

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

Là một mặt lưu ý, nếu bạn đang sử dụng Spring 3.1 trở lên, bạn có thể tận dụng chú thích @ComponentScan để bạn không phải sử dụng bất kỳ cấu hình xml nào về quét thành phần. Sử dụng nó cùng với @Configuration.

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

    @Autowired 
    ArticleService articleService; 
    ... 
} 

Bạn có thể tìm thấy mùa xuân này trong phần sâu trên Autowiring hữu ích.

+2

cảm ơn bạn nó hoạt động – achref05

+0

Trong những tập tin dòng này nên được thêm vào? –

+1

@Oleg trong applicationContext.xml của bạn. Hãy chắc chắn rằng định nghĩa vùng tên cho tiền tố 'context' được bao gồm như được giải thích [ở đây] (http://stackoverflow.com/q/16673644/851811) –

2

Bạn có bean được khai báo trong tệp ngữ cảnh có id của "articleService" không? Tôi tin rằng autowiring phù hợp với id của một bean trong các file ngữ cảnh của bạn với tên biến mà bạn đang cố gắng để Autowire.

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; 
    } 
} 

Bạn thay đổi dòng pkgId int tin trong sự thay đổi kiểu dữ liệu int để tên lớp nguyên thủy hoặc thêm chú thích @autowired

Các vấn đề liên quan