org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为' productController'的bean时出错:

时间:2016-09-01 17:57:02

标签: java spring hibernate spring-mvc

我是春天和新手的新手,一直在研究和探索这些技术为企业发展带来的动力。但是我遇到了一个试图运行的程序,它不断抛出以下错误。我在这里发现了类似的问题并完成了所有建议,但仍然得到相同的错误。

 **WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController': Unsatisfied dependency expressed through field 'itemMasterDao': Cannot find class [org.apache.commons.dbcp2.BasicDataSource] for bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/inventory-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp2.BasicDataSource] for bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/inventory-servlet.xml]; nested exception is java.lang.ClassNotFoundException:** org.apache.commons.dbcp2.BasicDataSource
    Aug 30, 2016 12:14:29 AM org.springframework.web.servlet.DispatcherServlet initServletBean
    SEVERE: Context initialization failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController': Unsatisfied dependency expressed through field 'itemMasterDao': Cannot find class [org.apache.commons.dbcp2.BasicDataSource] for bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/inventory-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp2.BasicDataSource] for bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/inventory-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:350)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:775)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
        at javax.servlet.GenericServlet.init(GenericServlet.java:158)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1238)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1151)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1038)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5027)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5337)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp2.BasicDataSource] for bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/inventory-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1357)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:628)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:597)
        at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1450)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:446)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:424)
        at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1048)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1018)



    inventory-servlet.xml



    <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.chills.hspring.product.controller, com.chills.hspring.product.dao" />

        <bean id="itemMasterDao" class="com.chills.hspring.product.dao.ItemMasterDAOImpl">
            <constructor-arg>
                <ref bean="sessionFactory" />
            </constructor-arg>
        </bean>

           <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost:3306/test" />
            <property name="username" value="root" />
            <property name="password" value="j123456" />
        </bean>


     <bean id="sessionFactory"    Class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        </bean>

        <tx:annotation-driven /> 
        <bean id="transactionManager"   class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
        </bean>



        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/Pages/"></property>
            <property name="suffix" value=".jsp"></property>        
        </bean>

    </beans>


    web.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.4"
             xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

      <servlet>
        <servlet-name>inventory</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
        <servlet-name>inventory</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>

    </web-app>


    hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/test
        </property>

        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>

        <!-- Display all generated SQL to stdout -->
        <property name="show_sql">true</property>

        <mapping class="com.chills.hspring.dto.ItemMaster" />

    </session-factory>

</hibernate-configuration>




    ItemMasterDAOImpl.java

    package com.chills.hspring.product.dao;

    import java.util.List;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.transaction.annotation.Transactional;

    import com.chills.hspring.dto.ItemMaster;

    @Transactional
    public class ItemMasterDAOImpl implements ItemMasterDAO {

        private SessionFactory sessionFactory;

        public ItemMasterDAOImpl(SessionFactory sessionFactory) {

            this.sessionFactory =  sessionFactory;
        }
        @Override
        public void add(ItemMaster item) {

            Session session = sessionFactory.getCurrentSession();
            try {

                session.beginTransaction();
                session.save(item);
            }catch(HibernateException e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
            session.getTransaction().commit();

        }
        @Override
        public void update(ItemMaster item) {

            Session session = sessionFactory.getCurrentSession();
            try {
                System.out.println("IN UPDATE");
                session.beginTransaction();
                session.saveOrUpdate(item);
            }catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
            session.getTransaction().commit();

        }

        @Override
        public ItemMaster getItem(Long id) {

            Session session = sessionFactory.getCurrentSession();
            ItemMaster item = null;
            try {
                System.out.println("IN GETITEM");
                session.beginTransaction();
                item = (ItemMaster) session.get(ItemMaster.class, id);
            }catch(HibernateException e) {

                e.printStackTrace();
                session.getTransaction().rollback();
            }
            session.getTransaction().commit();
            return item;

        }
        @Override
        public void delete(Long id) {

            Session session =  sessionFactory.getCurrentSession();
            session.beginTransaction();
            ItemMaster item = (ItemMaster)session.get(ItemMaster.class, id);
            if(null != item) {
                session.delete(item);
            }
            session.getTransaction().commit();
        }
        @SuppressWarnings({ "deprecation", "unchecked" })
        @Override
        public List<ItemMaster> list() {

            Session session = sessionFactory.getCurrentSession();
            session.beginTransaction();
            List<ItemMaster> items = null;
            try {
                System.out.println("IN LIST");
                items = (List<ItemMaster>)session.createQuery("from ItemMaster").list();
            }catch(HibernateException e) {

                e.printStackTrace();
                session.getTransaction().rollback();
            }
            session.getTransaction().commit();
            return items;

        }


    }

    ItemMasterDAO.java

    package com.chills.hspring.product.dao;

    import java.util.List;

    import com.chills.hspring.dto.*;

    public interface ItemMasterDAO {

        public List<ItemMaster> list();
        public void add(ItemMaster item);
        public void update(ItemMaster item);
        public ItemMaster getItem(Long id);
        public void delete(Long id);

    }

    ItemMaster.java

    package com.chills.hspring.dto;

    import java.io.Serializable;
    import java.util.Date;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;

    @Entity
    @Table(name="ItemMaster")
    public class ItemMaster implements Serializable {

        private static final long serialVersionUID = 45369355259515150L;
        private Long item_code;
        private String item_name;
        private double price;
        private int qty;

        @Temporal(TemporalType.DATE)
        @Column (name="createdOn")
        private Date createdOn;

        public Date getCreatedOn()
        {
            return createdOn;
        }
        public void setCreatedOn(Date createdOn)
        {
            this.createdOn =  createdOn;
        }
        @Id
        @GeneratedValue
        @Column(name="item_code")
        public Long getItem_code()
        {
            return item_code;
        }
        public void setItem_code(Long item_code)
        {
            this.item_code =  item_code;
        }
        @Column(name="item_name")
        public String getItem_name()
        {
            return item_name;
        }
        public void setItem_name(String item_name)
        {
            this.item_name =  item_name;
        }
        @Column(name="price")
        public double getPrice()
        {
            return price;
        }
        public void setPrice(double price)
        {
            this.price = price;
        }
        @Column (name="qty")
        public int getQty()
        {
            return qty;
        }
        public void setQty(int qty)
        {
            this.qty = qty;
        }


    }


    ProductController.java


    package com.chills.hspring.product.controller;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.portlet.ModelAndView;
    import com.chills.hspring.product.dao.*;

    import com.chills.hspring.dto.ItemMaster;

    @Controller
    public class ProductController {

        @Autowired
        private ItemMasterDAO itemMasterDao;


        @RequestMapping(value="/list")
        public ModelAndView list() {
            List<ItemMaster> itemList = itemMasterDao.list();
            ModelAndView model = new ModelAndView("itemMasterList");
            model.addObject("itemList",itemList);
            return model;
        }
        @RequestMapping(value="/loadAddForm")
        public ModelAndView add() {

            ModelAndView model = new ModelAndView("ItemMasterAdd");
            ItemMaster item =  new ItemMaster();
            model.addObject("item", item);
            List<ItemMaster> itemList = itemMasterDao.list();
            model.addObject("itemList",itemList);
            return model;
        }
        @RequestMapping(value="/edit")
        public ModelAndView edit(@RequestParam(value="id", required = true)Long id) {

            System.out.println("Id = "+ id);
            ModelAndView model = new ModelAndView("ItemMasterAdd");
            ItemMaster item = itemMasterDao.getItem(id);
            model.addObject("item", item);
            List<ItemMaster>itemList = itemMasterDao.list();
            model.addObject("itemList",itemList);
            return model;
        }
        @RequestMapping(name="/delete")
        public ModelAndView delete(@RequestParam(value="id", required = true)Long id) {
            ModelAndView model =  new ModelAndView("ItemMasterAdd");
            itemMasterDao.delete(id);
            List<ItemMaster> itemList = itemMasterDao.list();
            model.addObject("itemList", itemList);
            return model;
        }
        @RequestMapping(name="/save", method = RequestMethod.POST)
        public ModelAndView save(@ModelAttribute("item")ItemMaster item) {

            System.out.println(item.getItem_name());
            if(null != item)
                itemMasterDao.add(item);
            ModelAndView model =  new ModelAndView("ItemMasterAdd");
            item = new ItemMaster();
            model.addObject("item",item);
            List<ItemMaster> itemList = itemMasterDao.list();
            model.addObject("itemList", itemList);
            return model;
        }
        @RequestMapping(value = "/update", method = RequestMethod.POST)
        public ModelAndView update(@ModelAttribute("item")ItemMaster item) {

            System.out.println(item.getItem_name());
            if(null != item)
                itemMasterDao.update(item);
            ModelAndView model = new ModelAndView("ItemMasterAdd");
            item  = new ItemMaster();
            model.addObject("item",item);
            List<ItemMaster> itemList = itemMasterDao.list();
            model.addObject("itemList", itemList);
            return model;
        }



    }

1 个答案:

答案 0 :(得分:0)

org.apache.commons.dbcp2.BasicDataSource缺少JAR

将此添加到pom.xml依赖项或download jar并将其放在类路径中

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.1.1</version>
</dependency>