2016-11-19 107 views
2

XML文件應該是對的,因爲我寫了一個簡單的MVC測試演示,它的工作原理well.But如果我寫這樣的,自動裝配Autowired依賴注射失敗。注射自動裝配依賴失敗(春季用SpringMVC + JPA + + springdata)

applicationContext.xml中:

<context:property-placeholder location="classpath:db.properties"/> 
<bean id="dataSource" 
    class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    <property name="user" value="${jdbc.user}"></property> 
    <property name="password" value="${jdbc.password}"></property> 
    <property name="driverClass" value="${jdbc.driverClass}"></property>  
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>  
</bean> 


<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource"></property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean> 
    </property> 
    <property name="packagesToScan" value="com.luoxiao.sssp"></property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 

      <prop key="hibernate.cache.use_second_level_cache">true</prop> 
      <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
     </props> 
    </property> 
    <property name="sharedCacheMode" value="ENABLE_SELECTIVE"></property> 
</bean> 


<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"></property>  
</bean> 


<tx:annotation-driven transaction-manager="transactionManager"/>  
<jpa:repositories base-package="com.luoxiao.sssp" 
    entity-manager-factory-ref="entityManagerFactory"></jpa:repositories> 

springDispatcherServlet-servlet.xml中

<context:component-scan base-package="com.luoxiao.sssp" use-default-filters="false"> 
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> 
</context:component-scan> 


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/views/"></property> 
    <property name="suffix" value=".jsp"></property> 
</bean> 

<mvc:default-servlet-handler/> 
<mvc:annotation-driven/> 

存儲庫:

@Repository 
    public interface EmployeeRepository extends JpaRepository<Employee, Integer>{ 

    } 

服務:

@Service 
public class EmployeeService { 

    @Autowired 
    public EmployeeRepository employeeRepository; 

    @Transactional 
    public Page<Employee> getPage(int pageNo,int pageSize){ 
     PageRequest pageable = new PageRequest(pageNo-1, pageSize); 
     return employeeRepository.findAll(pageable); 
    }  
} 

處理程序:

@Controller 
public class EmployeeHandler { 

    @Autowired 
    public EmployeeService employeeService; 

    @RequestMapping(value="/emps") 
    public String list(@RequestParam(value="pageNo",required = false,defaultValue="1")String pageNoStr,Map<String,Object>map){ 
     int pageNo = 1; 
     try{ 
      Integer.parseInt(pageNoStr); 
     }catch(Exception e){ 
      Page<Employee> page = employeeService.getPage(pageNo, 5); 
      map.put("page", page); 
     } 
     return "emp/list"; 

} 

} 例外:

Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.luoxiao.sssp.repository.EmployeeRepository com.luoxiao.sssp.service.EmployeeService.employeeRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeRepository': Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: 
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'entityManager' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.setMappingContext(Lorg/springframework/data/mapping/context/MappingContext;)V 
    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:700) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:587) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1798) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    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: public com.luoxiao.sssp.repository.EmployeeRepository com.luoxiao.sssp.service.EmployeeService.employeeRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeRepository': Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: 
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'entityManager' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.setMappingContext(Lorg/springframework/data/mapping/context/MappingContext;)V 
    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) 
    ... 26 more 
+0

檢查是否有幫助。 http://stackoverflow.com/questions/23087527/spring-data-nosuchmethoderror-jparepositoryfactorybean-setmappingcontext – ScanQR

回答

0

通過刪除彈簧數據公地解決dependency.Thank你這麼多,TechBreak!

相關問題