Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyController':

I am doing spring + hibernate application. When I run the application on tomcat server I am getting some exceptions.

INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization started INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Sat May 17 19:51:03 CEST 2014]; parent: Root WebApplicationContext INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml] INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/inscription],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.gestEtu.project.controller.CompteController.hello(java.lang.String,java.lang.String,java.lang.String,org.springframework.ui.Model) INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.gestEtu.project.controller.HomeController.home(java.util.Locale,org.springframework.ui.Model) INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0' ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.gestEtu.project.model.service.CompteServiceImp com.gestEtu.project.controller.CompteController.compteServ; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteServiceImp': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.gestEtu.project.model.service.CompteServiceImp.setCompteDAO(com.gestEtu.project.model.dao.CompteDAOHib); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteDAOHib' defined in file [C:\Users\zouhair\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\TESTER\WEB-INF\classes\com\gestEtu\project\model\dao\CompteDAOHib.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.gestEtu.project.model.dao.CompteDAOHib]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.gestEtu.project.model.dao.CompteDAOHib.<init>()     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)     at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)     at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)     at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)     at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)     at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)     at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)     at javax.servlet.GenericServlet.init(GenericServlet.java:160)     at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1189)     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1103)     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935)     at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262)     at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257)     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.BeanCreationException: Could not autowire field: private com.gestEtu.project.model.service.CompteServiceImp com.gestEtu.project.controller.CompteController.compteServ; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteServiceImp': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.gestEtu.project.model.service.CompteServiceImp.setCompteDAO(com.gestEtu.project.model.dao.CompteDAOHib); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteDAOHib' defined in file [C:\Users\zouhair\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\TESTER\WEB-INF\classes\com\gestEtu\project\model\dao\CompteDAOHib.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.gestEtu.project.model.dao.CompteDAOHib]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.gestEtu.project.model.dao.CompteDAOHib.<init>()     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)     at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)     ... 27 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteServiceImp': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.gestEtu.project.model.service.CompteServiceImp.setCompteDAO(com.gestEtu.project.model.dao.CompteDAOHib); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compteDAOHib' defined in file [C:\Users\zouhair\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\TESTER\WEB-INF\classes\com\gestEtu\project\model\dao\CompteDAOHib.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.gestEtu.project.model.dao.CompteDAOHib]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.gestEtu.project.model.dao.CompteDAOHib.<init>()     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)     at org.springframework.be    

root-context.xml

<?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:p="http://www.springframework.org/schema/p"     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">      <!-- Root Context: defines shared resources visible to all other web components -->      <bean id="propertyConfigurer"         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"         p:location="/WEB-INF/jdbc.properties" />      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"         destroy-method="close" p:driverClassName="${jdbc.driverClassName}"         p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" />      <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->     <bean id="sessionFactory"         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">         <property name="dataSource" ref="dataSource" />         <property name="mappingResources">             <list>                 <value>com/gestEtu/project/model/bo/Utilisateur.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Compte.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Message.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Groupe.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Etudiant.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Fichelecture.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Document.hbm.xml</value>                 <value>com/gestEtu/project/model/bo/Commentaire.hbm.xml</value>              </list>         </property>          <property name="hibernateProperties">             <props>                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>                 <prop key="hibernate.show_sql">true</prop>                 <prop key="hibernate.hbm2ddl.auto">update</prop>             </props>         </property>     </bean>      <!-- Transaction Manager -->     <bean id="txManager"         class="org.springframework.orm.hibernate4.HibernateTransactionManager">         <property name="sessionFactory" ref="sessionFactory" />     </bean>  </beans> 

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:beans="http://www.springframework.org/schema/beans"     xmlns:context="http://www.springframework.org/schema/context"     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/context http://www.springframework.org/schema/context/spring-context.xsd">      <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->      <!-- Enables the Spring MVC @Controller programming model -->     <annotation-driven />      <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->     <resources mapping="/resources/**" location="/resources/" />      <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->     <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">         <beans:property name="prefix" value="/WEB-INF/views/" />         <beans:property name="suffix" value=".jsp" />     </beans:bean>      <context:component-scan base-package="com.gestEtu.project" />     </beans:beans> 

CompteController.java

package com.gestEtu.project.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 org.springframework.web.bind.annotation.RequestParam;  import com.gestEtu.project.model.bo.Compte; import com.gestEtu.project.model.service.CompteServiceImp;  @Controller public class CompteController {     @Autowired     private CompteServiceImp compteServ;      // @Autowired     // public CompteController(CompteServiceImp compteServ) {     // this.compteServ=compteServ;     // }     //     @RequestMapping(value = "/inscription")     public String hello(             @RequestParam(value = "login", required = false, defaultValue = "zouhair") String login,             @RequestParam(value = "password", required = false, defaultValue = "pass") String password,             @RequestParam(value = "profil", required = false, defaultValue = "Etudiant") String profil,             Model model) {         int id = 1;         Compte compte = new Compte(id, login, password, profil);         compteServ.ajouterCompte(compte);         model.addAttribute("inscription", compte);         return "addCompte";     }  } 

compteService

package com.gestEtu.project.model.service;  import java.util.List;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional;  import org.springframework.stereotype.Service;  import com.gestEtu.project.model.bo.Compte; import com.gestEtu.project.model.bo.Utilisateur; import com.gestEtu.project.model.dao.CompteDAOHib;  @Service @Transactional(readOnly = true) public class CompteServiceImp implements CompteService {      private CompteDAOHib compteDAO;       @Autowired     public void setCompteDAO(CompteDAOHib compteDAO) {         this.compteDAO = compteDAO;     }      @Override     public void ajouterCompte(Compte compte) {         compteDAO.ajouterCompte(compte);     }      @Override     public List<Compte> getComptes() {         return compteDAO.getComptes();     }      @Override     public Compte findCompteByLogin(String login) {          return compteDAO.findCompteByLogin(login);     }      @Override     public void ajouterUtilisateur(Compte compte, Utilisateur utilisateur) {         this.ajouterCompte(compte);      }      @Override     public Utilisateur getUtilisateurById(int id) {         return null;     }      @Override     public List<Utilisateur> getUtilisateurs() {         return null;     }  } 

Can anybody help to resolve this?

CompteDAOHib

package com.gestEtu.project.model.dao;  import java.util.List;  import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional;  import com.gestEtu.project.model.bo.Compte;  @Repository @Transactional(propagation=Propagation.REQUIRED) public class CompteDAOHib extends HibernateDaoSupport implements CompteDAO {       public CompteDAOHib(SessionFactory sessionFactory) {         setSessionFactory(sessionFactory);     }      @Override     public void ajouterCompte(Compte compte) {         getHibernateTemplate().saveOrUpdate(compte);     }      @Override     public List<Compte> getComptes() {         try{             return (List<Compte>) getHibernateTemplate().find("from compte")                 .iterator();         }catch (Exception e) {             return null;         }     }      @Override     public Compte findCompteByLogin(String login) {         if ((login == null) || (login == "")) {             return null;         } else             try {                 return (Compte) getHibernateTemplate()                         .find("from Compte c where c.login = ?", login)                         .iterator().next();             } catch (Exception e) {                 return null;             }     }  } 

CompteService Code

package com.gestEtu.project.model.service;  import java.util.List;  import com.gestEtu.project.model.bo.Compte; import com.gestEtu.project.model.bo.Utilisateur;   public interface CompteService {      public void ajouterCompte(Compte compte);      public List<Compte> getComptes();      public Compte findCompteByLogin(String login);      public List<Utilisateur> getUtilisateurs();      public Utilisateur getUtilisateurById(int id);      public void ajouterUtilisateur(Compte compte, Utilisateur utilisateur);  } 
like image 227
Zouhair Kasmi Avatar asked May 17 '14 18:05

Zouhair Kasmi


People also ask

What is org Springframework beans factory BeanCreationException?

factory. BeanCreationException: Error creating a bean with name X" error if it is not able to instantiate a particular Spring bean. There could be numerous reasons why Spring could not able to create a bean with name X, but clue always lies on the detailed stack trace.

What is BeanCreationException?

BeanCreationException. . This means that Spring found a bean to create, but was unable to fulfill the dependencies needed to create this this Spring bean.

Why do we get bean creation exception?

By far, the most common cause of the BeanCreationException is Spring trying to inject a bean that doesn't exist in the context. For example, BeanA is trying to inject BeanB: @Component public class BeanA { @Autowired private BeanB dependency; ... }

What is org Springframework beans factory UnsatisfiedDependencyException?

UnsatisfiedDependencyException gets thrown when, as the name suggests, some bean or property dependency isn't satisfied. This may happen when a Spring application tries to wire a bean and can't resolve one of the mandatory dependencies.


2 Answers

Copied from the stacktrace:

BeanInstantiationException: Could not instantiate bean class [com.gestEtu.project.model.dao.CompteDAOHib]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.gestEtu.project.model.dao.CompteDAOHib.<init>()

By default, Spring will try to instantiate beans by calling a default (no-arg) constructor. The problem in your case is that the implementation of the CompteDAOHib has a constructor with a SessionFactory argument. By adding the @Autowired annotation to a constructor, Spring will attempt to find a bean of matching type, SessionFactory in your case, and provide it as a constructor argument, e.g.

@Autowired public CompteDAOHib(SessionFactory sessionFactory) {     // ... } 
like image 121
matsev Avatar answered Sep 18 '22 23:09

matsev


I have been getting similar error, and just want to share with you. maybe it will help someone.

If you want to use EntityManagerFactory to get an EntityManager, make sure that you will use:

<persistence-unit name="name" transaction-type="RESOURCE_LOCAL"> 

and not:

<persistence-unit name="name" transaction-type="JPA"> 

in persistance.xml

clean and rebuild project, it should help.

like image 44
Damiani Avatar answered Sep 19 '22 23:09

Damiani