2016-07-12 3 views
3

Привет, ребята любой орган может помочь мне Я создаю новый проект с использованием Spring MVC и зимуют Это мое хранилищеНеудовлетворенный зависимость выражается через поле «услуги»: Нет квалификационную боб типа

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

} 

и это реализация

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

} 

также это интерфейс сервиса

package com.cs545.ecom.service; 

import com.cs545.ecom.domain.Product; 

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

и это реализация услуг

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

} 

это контроллер

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

, когда я запустить программу я получил эту ошибку

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) 

это мой 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> 

и это конфигурация пружины

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

также это спящий режим конфигурации

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

Может кто-нибудь мне помочь?

ответ

4

В конфигурации компонента-сканирования необходимо включить com.cs545.ecom.service
Таким образом, вы должны иметь

<context:component-scan base-package="com.cs545.ecom.controller, com.cs545.ecom.service"/> 
+0

Или, чтобы избавиться от необходимости редактировать его, когда вы добавляете новый пакет, просто сканируйте 'com.cs545'. – dnault

+0

Yeap. Это зависит от вашего дела. Больший объем сканирования потребует времени для загрузки весны. –

0

Изменение context:component-scan в web.xml, как показано ниже

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

Spring зарегистрирует все компоненты, определенные внутри данного пакета. В вашем случае будет зарегистрирован только компонент контроллера, а сервисные компоненты - нет.

0

Как уже упоминалось в других ответах, вам необходимо настроить сканирование классов для вашего компонента, чтобы убедиться, что он может быть подключен к другому компоненту.

Кроме этого, эта ошибка может быть вызвана несколькими другими проблемами. Основная причина этого заключается в том, что контейнер IOC не инициализировал компонент типа SomeType, когда время выполнения пытается автоповести этот тип компонента в какой-либо другой класс.

В этом article перечислены возможные ошибки, которые могут вызвать это.

Смежные вопросы

 Смежные вопросы