web-dev-qa-db-fra.com

Dépendance non satisfaite exprimée dans le champ 'service': aucun bean qualifiant

Salut les gars, tout le monde peut m'aider Je crée un nouveau projet en utilisant Spring MVC et Hibernate

package com.cs545.ecom.repository;

import Java.util.List;

import com.cs545.ecom.domain.Product;

public interface ProductDAO {
    List<Product> getAllProducts();

    Product getProductById(int id);

    Product getProductByName(String name);

    Product addNewProduct(Product product);

    Product updateProduct(int productId, Product product);

}

et c'est la mise en œuvre

package com.cs545.ecom.repository.impl;

import Java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.stereotype.Repository;

import com.cs545.ecom.domain.Product;
import com.cs545.ecom.repository.ProductDAO;

@Repository
public class ProductDAOimpl implements ProductDAO{

    SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
    public List<Product> getAllProducts() {
        // TODO Auto-generated method stub
        return null;
    }

    public Product getProductById(int id) {
        // TODO Auto-generated method stub
        return null;
    }

    public Product getProductByName(String name) {
        // TODO Auto-generated method stub
        return null;
    }

    public Product addNewProduct(Product product) {
        Product productSaved=new Product();
        Session session=sessionFactory.openSession();
        session.beginTransaction();
        productSaved=(Product)session.save(product);
        session.getTransaction().commit();
        session.close();
        return productSaved;
    }

    public Product updateProduct(int productId, Product product) {
        // TODO Auto-generated method stub
        return null;
    }

}

aussi c'est l'interface de service

package com.cs545.ecom.service;

import com.cs545.ecom.domain.Product;

public interface ProductService {
    Product addNewProduct(Product product);
}

et c'est la mise en œuvre du service

package com.cs545.ecom.service.impl;



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

import com.cs545.ecom.domain.Product;
import com.cs545.ecom.repository.ProductDAO;
import com.cs545.ecom.service.ProductService;
@Service
public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductDAO repository;

    public Product addNewProduct(Product product) {
        return repository.addNewProduct(product);
    }

}

c'est le contrôleur

package com.cs545.ecom.controller;



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.cs545.ecom.domain.Category;
import com.cs545.ecom.domain.Product;
import com.cs545.ecom.repository.ProductDAO;
import com.cs545.ecom.service.ProductService;

@Controller
public class ProductController {
    @Autowired
    public ProductService service;

    @RequestMapping("/")
    public String start() {
        return "UI/jsp/product";
    }
    @RequestMapping("/addproduct")
    public String addNewProduct(Model model){
    //  Product product=service.addNewProduct(new Product("Apple iphone", "gfgfg", "Amazing Iphone ", new Category()));
        //Product product=new Product("Apple iphone", "gfgfg", "Amazing Iphone ", new Category());

        //model.addAttribute("product",product);
        return "UI/jsp/product";
    }
}

quand j'ai lancé le programme, j'ai eu cette erreur

HTTP Status 500 - Servlet.init() for servlet Dispatcher Servlet threw exception


type Exception report

message Servlet.init() for servlet Dispatcher Servlet threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception
javax.servlet.ServletException: Servlet.init() for servlet Dispatcher Servlet threw exception
    org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
    org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
    org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:616)
    org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:528)
    org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1099)
    org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:672)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1520)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1476)
    Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    Java.lang.Thread.run(Unknown Source)


root cause
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController': Unsatisfied dependency expressed through field 'service': No qualifying bean of type [com.cs545.ecom.service.ProductService] found for dependency [com.cs545.ecom.service.ProductService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.cs545.ecom.service.ProductService] found for dependency [com.cs545.ecom.service.ProductService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:569)
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.Java:88)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.Java:349)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.Java:1214)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:543)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:482)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:306)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:230)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:302)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:197)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:775)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:861)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:541)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.Java:668)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.Java:634)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.Java:682)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.Java:553)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.Java:494)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.Java:136)
    javax.servlet.GenericServlet.init(GenericServlet.Java:158)
    org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
    org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
    org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:616)
    org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:528)
    org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1099)
    org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:672)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1520)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1476)
    Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    Java.lang.Thread.run(Unknown Source)


root cause
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.cs545.ecom.service.ProductService] found for dependency [com.cs545.ecom.service.ProductService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.Java:1403)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.Java:1056)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.Java:1018)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:566)
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.Java:88)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.Java:349)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.Java:1214)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:543)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:482)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:306)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:230)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:302)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:197)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:775)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:861)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:541)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.Java:668)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.Java:634)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.Java:682)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.Java:553)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.Java:494)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.Java:136)
    javax.servlet.GenericServlet.init(GenericServlet.Java:158)
    org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
    org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
    org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:616)
    org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:528)
    org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1099)
    org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:672)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1520)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1476)
    Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    Java.lang.Thread.run(Unknown Source)

c'est mon fichier web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--init-param is not needed when followed default naming convention for configuration file "DefaultServlet-servlet.xml"-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/dispatcher-config.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Dispatcher Servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

et c'est la configuration de printemps

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    ">
  <mvc:annotation-driven/>
  <mvc:resources mapping="/resources/**" location="/resources/"/>
  <context:component-scan base-package="com.cs545.ecom.controller"/>

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp"/>
  </bean>
  <bean id= "messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>

</beans>

aussi c'est la configuration d'hibernation

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">111111</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3338/waaProject</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping class="com.cs545.ecom.domain.Product"></mapping>
    </session-factory>
</hibernate-configuration>

Quelqu'un peut-il m'aider?

3
Hamada Ibrahim

Dans la configuration de Component-Scan, vous devez inclure com.cs545.ecom.service  
Donc vous devriez avoir

<context:component-scan base-package="com.cs545.ecom.controller, com.cs545.ecom.service"/>
5
Lê Thọ

Modifier context:component-scan dans web.xml comme indiqué ci-dessous

  <context:component-scan base-package="com.cs545.ecom"/>

Spring enregistrera tous les haricots définis dans le paquet donné. Dans votre cas, seul le haricot de contrôleur sera enregistré et pas le haricot de service.

0
vipin cp

Comme mentionné dans d'autres réponses également, vous devez configurer l'analyse des chemins de classes pour votre bean afin de vous assurer qu'il peut être automatiquement câblé dans un autre bean.

En dehors de cela, cette erreur peut être provoquée par plusieurs autres problèmes. La raison principale en est que le conteneur IOC n'a pas initialisé un bean de type SomeType lorsque l'exécution tente de lier automatiquement ce type de bean à une autre classe.

Cet article résume les erreurs possibles pouvant en être la cause.

0
Supun Wijerathne