2013-08-15 4 views
1

Я пытаюсь autowire репозиторий и он отказывается работать. Я боролся с этим в течение недели, и я не могу понять это. Что смешно, так это то, что когда я прокомментирую аутологию репозитория человека, программа работает и компилируется правильно, но как только я пытаюсь автоподписать репозиторий человека, я получаю эту ошибку (я пропустил большую часть ошибки, потому что я не могу опубликовать все это) Вот исключение, мои классы ниже него.Spring - @Autowiring Репозиторий не работает. @Autowiring Другие классы Делает

HTTP Status 500 - Servlet.init() for servlet appServlet threw exception 

type Exception report 

message Servlet.init() for servlet appServlet threw exception 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Servlet.init() for servlet appServlet threw exception 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    java.lang.Thread.run(Thread.java:722) 

root cause 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.mycompany.smsdatabase.service.PersonImport com.mycompany.smsdatabase.controller.HomeController.personImport; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personImport': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.mycompany.smsdatabase.repositories.PersonRepository com.mycompany.smsdatabase.service.PersonImport.PersonRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.mycompany.smsdatabase.repositories.PersonRepository] found for dependency: 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.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    java.lang.Thread.run(Thread.java:722) 

Вот классы, с которыми я работаю.

package com.mycompany.smsdatabase.controller; 

import com.mycompany.smsdatabase.service.PersonImport; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class HomeController { 
    @Autowired 
    PersonImport personImport; 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String Home() 
    { 
     personImport.doImportPerson("anthony"); 
     return "index"; 
    } 
} 

package com.mycompany.smsdatabase.service; 
import com.mycompany.smsdatabase.domain.Person; 
import com.mycompany.smsdatabase.repositories.PersonRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

@Service 
@Transactional 
public class PersonImport { 

@Autowired 
private PersonRepository PersonRepository; 

public Person doImportPerson(String id) 
{ 
    Person person = PersonRepository.findById(id); 
    if (person == null) { 
    person = new Person(id,"anthony"); 
    } 
    PersonRepository.save(person); 
    System.out.println("inside doImportPerson"); 
    return person; 
} 
} 
package com.mycompany.smsdatabase.repositories; 

import com.mycompany.smsdatabase.domain.Person; 
import org.springframework.data.neo4j.repository.GraphRepository; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

@Repository 
public interface PersonRepository extends GraphRepository<Person>{ 
    Person findById(String id); 
} 

Я опустил класс person, так как это просто класс сущности узла.

Также Вот мой Контекстное XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:neo4j="http://www.springframework.org/schema/data/neo4j" 
     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/context 
    http://www.springframework.org/schema/context/spring-context-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/data/neo4j 
    http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd"> 

    <mvc:annotation-driven /> 

    <context:component-scan base-package="com.mycompany.smsdatabase"> 
    </context:component-scan> 

    <context:spring-configured/> 
    <neo4j:config storeDirectory="target/data/graph.db"/> 
    <neo4j:repositories base-package="com.mycompany.smsdatabase"/> 

    <bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase" destroy-method="shutdown"/> 
    <tx:annotation-driven mode="proxy"/> 

</beans> 
+0

Вы можете разместить код для PersonImport пожалуйста? –

+0

Ничего, я пропустил это в первый раз. –

+0

Можете ли вы также реализовать реализацию PersonRepository? По крайней мере, объявление класса с аннотациями – Yuriy

ответ

0

Вы должны определить соответствующие бобы для переменных, снабженными @AutoWired в контексте файла приложения, т.е.

<bean id="personRepository" class="com.mycompany.smsdatabase.repositories.PersonRepository"/> 
<bean id="personImport" class="com.mycompany.smsdatabase.service.PersonImport"/> 
+0

Я пробовал это, и он по-прежнему бросает те же ошибки, im не уверен, что делать в этот момент – IceNine

+0

'PersonRepository' - это интерфейс. –

+0

Невозможно авторизовать интерфейс? в учебнике cineast, который весной обеспечивает их автоподключение многих интерфейсов. – IceNine

1

Ваша весна конфигурации неправильно:

У вас есть <neo4j:repositories base-package="com.mycompany.smsdatabase"/> в вашей конфигурации

но импорт в коде Java читает

import com.mycompany.smsdatabase.repositories.PersonRepository;

Вы должны исправить пружинные конфигурации для

<neo4j:repositories base-package="com.mycompany.smsdatabase.repositories"/>

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