2015-02-18 205 views
-1

寻找几天的正确答案,但没有运气。请帮忙。创建bean时出错:自动布线依赖关系注入失败

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminContactController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: nl.crossfit.crossfithoorn.dao.ContactDao nl.crossfit.crossfithoorn.controller.admin.AdminContactController.contactDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contactDaoImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'CrossfithoornPU' is defined 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466) 
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

弹簧servlet.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" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation=" http://www.springframework.org/schema/beans  
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.0.xsd 
          http://www.springframework.org/schema/aop 
          http://www.springframework.org/schema/spring-aop-3.0.xsd 
          http://www.springframework.org/schema/tx 
          http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

    <!-- Use @Component annotations for bean definitions --> 
    <!-- The controllers are autodetected POJOs labeled with the @Controller annotation. 
    Scan a package for "targets" to work on. --> 
    <context:component-scan base-package="nl.crossfit.crossfithoorn.controller"/> 
    <context:component-scan base-package="nl.crossfit.crossfithoorn.dao"/> 
    <context:component-scan base-package="nl.crossfit.crossfithoorn.daoImpl"/> 
    <context:component-scan base-package="nl.crossfit.crossfithoorn.model"/> 

    <!-- Selects a static view for rendering without the need for an explicit controller/sets a default page when app is --> 
    <mvc:view-controller path="/" view-name="index"/> 

    <!--???--> 
    <bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" 
      p:registerDefaultFormatters="true" /> 

    <!-- Turns on support for mapping requests to Spring MVC @Controller methods 
    Also registers default Formatters and Validators for use across all @Controllers --> 
    <mvc:annotation-driven conversion-service="applicationConversionService" /> 

    <!-- Allows for mapping the DispatcherServlet to "/" by forwarding static resource requests to the container's default Servlet --> 
    <mvc:default-servlet-handler/> 

    <!-- Add Transaction support --> 
    <bean id="myTxManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
      p:entityManagerFactory-ref="emf" /> 
    <!-- <bean id="txTemplate" class="org.springframework.transaction.support.TransactionTemplate"> 
     <property name="transactionManager" value="myTxManager" /> 
    </bean>--> 
    <!-- Use @Transaction annotations for managing transactions --> 
    <tx:annotation-driven transaction-manager="myTxManager" /> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://localhost:3306/crossfithoorn"/> 
     <property name="username" value="root"/> 
     <property name="password" value="nbuser"/> 
    </bean> 

    <!-- Add JPA support--> 
    <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
      p:persistenceUnitName="persistenceUnit"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 
    </bean> 

    <!-- View resolver --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> 
     <property name="prefix" value="/WEB-INF/jsp/"></property> 
     <property name="suffix" value=".jsp"></property> 
    </bean> 
</beans> 

的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>nl.crossfit.crossfithoorn</groupId> 
    <artifactId>CrossFitHoorn</artifactId> 
    <version>crossfithoorn</version> 
    <packaging>war</packaging> 
    <name>CrossFitHoorn</name> 

    <properties> 
     <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <spring.version>3.2.6.RELEASE</spring.version> 
     <hibernate.version>4.3.1.Final</hibernate.version> 
     <logback.version>1.1.2</logback.version> 
     <slf4j.version>1.7.5</slf4j.version> 
     <querydsl.version>3.5.1</querydsl.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.3</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>org.jadira.usertype</groupId> 
      <artifactId>usertype.jodatime</artifactId> 
      <version>2.0.1</version> 
     </dependency> 
     <!--Spring--> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
      <type>jar</type> 
     </dependency> 
     <!--  <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-core</artifactId> 
      <version>${spring_security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>${spring_security.version}</version> 
     </dependency>--> 
     <!-- QueryDSL --> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-core</artifactId> 
      <version>${querydsl.version}</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
      <version>${querydsl.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-jpa</artifactId> 
      <version>${querydsl.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.6.1</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <!-- MySQL JDBC connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.31</version> 
     </dependency> 
     <!-- Hibernate JPA Provider --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>cglib</groupId> 
        <artifactId>cglib</artifactId> 
       </exclusion> 
       <!-- Exclude Commons Logging in favor of SLF4j --> 
       <exclusion> 
        <groupId>org.apache.commons</groupId>      <artifactId>com.springsource.org.apache.commons.logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency>  
     <!-- C3P0-based implementation of the Hibernate ConnectionProvider --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <!-- Hibernate validator --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>${hibernate.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator-annotation-processor</artifactId> 
      <version>5.0.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.4.GA</version> 
      <scope>runtime</scope> 
     </dependency> 
     <!-- Logging dependencies --> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>${logback.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${slf4j.version}</version> 
      <scope>runtime</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jul-to-slf4j</artifactId> 
      <version>${slf4j.version}</version> 
      <scope>runtime</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>log4j-over-slf4j</artifactId> 
      <version>${slf4j.version}</version> 
      <scope>runtime</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.6</version> 
     </dependency> 
    </dependencies>  
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
        <compilerArguments> 
         <endorseddirs>${endorsed.dir}</endorseddirs> 
        </compilerArguments> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>com.mysema.maven</groupId> 
       <artifactId>apt-maven-plugin</artifactId> 
       <version>1.0.9</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>process</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>target/generated-sources/java</outputDirectory>        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

使用查询-DSL

ContactDaoImpl

AdminContactController

@Controller 
public class AdminContactController { 

    @Autowired ContactDao contactDao; 

    @RequestMapping(value = "/admin/contact/list", method = GET) 
    public String adminContactPage(Model model) { 
     model.addAttribute("contacts", contactDao.getAllContacts()); 

     return "/admin/contact/lijst"; 
    } 

    @RequestMapping(value = "/admin/contact/view", method = GET) 
    public String viewContact() { 
     return "/admin/contact/view"; 
    } 

ServiceImpl

public class ServiceImpl<T extends Object> implements Service<T> { 

    public static final QContact qCcontact = QContact.contact; 
    public static final QUser qUser = QUser.user; 
    public static final QWod qWod = QWod.wod; 
    public static final QWodWinkel qWodWinkel = QWodWinkel.wodWinkel; 

    @PersistenceContext(unitName = "CrossfithoornPU") 
    protected EntityManager em; 

    protected final Class<T> entClass; 
    protected final EntityPathBase<T> entity; 

    public ServiceImpl(Class<T> entClass, EntityPathBase entity) { 
     this.entClass = entClass; 
     this.entity = entity; 
    } 

    public Class<T> getEntClass() { 
     return entClass; 
    } 

    @Override 
    public T getById(Integer id) { 
     T foundEntity = em.find(entClass, id); 
     if (foundEntity == null) { 
      try { 
       throw new ObjectRetrievalFailureException(entClass, id); 
      } catch (ObjectRetrievalFailureException ex) { 
       Logger.getLogger(ServiceImpl.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
     return foundEntity; 
    } 

    @Override 
    public List<T> getAll() { 
     return from().list(entity); 
    } 

    @Override 
    @Transactional 
    public void deleteObj(T obj) { 
     em.remove(obj); 
    } 

    @Override 
    @Transactional 
    public void delete(Integer id) { 
     T foundEntity = getById(id); 
     em.remove(foundEntity); 
    } 

    @Override 
    @Transactional 
    public T merge(T obj) { 
     return em.merge(obj); 
    } 

    @Override 
    @Transactional 
    public void persist(T obj) { 
     em.persist(obj); 
    } 

    @Override 
    @Transactional 
    public void persistAll(Collection<T> objs) { 
     for (T obj : objs) { 
      em.persist(obj); 
     } 
    } 

    @Override 
    public void refresh(T obj) { 
     em.refresh(obj); 
    } 

    @Override 
    public void flush() { 
     em.flush(); 
    } 

    @Override 
    public void detach(T obj) { 
     em.detach(obj); 
    } 

    /** 
    * Returns a new JPAQuery object associated with the default EntityManager 
    * 
    */ 
    protected JPAQuery query() { 
     return new JPAQuery(em); 
    } 

    public JPAQuery from() { 
     return from(entity); 
    } 

    @Override 
    public JPAQuery from(EntityPath<?> from) { 
     return query().from(from); 
    } 
} 

回答

0

只需读取日志,其清晰。看:

Injection of autowired dependencies failed; 

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: nl.crossfit.crossfithoorn.dao.ContactDao nl.crossfit.crossfithoorn.controller.admin.AdminContactController.contactDao; 

好了,在这里我们看到,AdminContactController需要的ContactDao一个实例。

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contactDaoImpl': Injection of persistence dependencies failed; 

这里,日志让我们看到注入持久性依赖的失败

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'CrossfithoornPU' is defined 

在你的应用环境,可以设置persistenceUnit

<!-- Add JPA support --> 
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:persistenceUnitName="persistenceUnit"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
</bean> 

uses the specified persistence unit name as the name of the default persistence unit, if applicable and only applied if no external PersistenceUnitManager specified

的错误是由于持久性单元名称。如何看看persistence.xml?如果您需要,请用您的persistence.xml更新您的问题。

+0

非常感谢布鲁诺。我没有注意到ServiceImpl接口。在这个接口中也很明显:@PersistenceContext(unitName =“CrossfithoornPU”) protected EntityManager em; – dragos 2015-02-18 08:28:33

+0

不客气@dragos。如果这有效,请考虑接受答案。 – 2015-02-18 09:13:35

0

首先,你有2个entityManager:在ContactDaoImpl和ServiceImpl中。你只能留下第二个。第二个例外说“没有名为CrossfithoomPU的bean”被定义。将此名称更改为“persistenceUnit”,因为它在xml文件中。

+0

非常感谢Alex! – dragos 2015-02-18 08:31:57

相关问题