2013-04-29 2 views
0

Я использую Spring Data JPA (1.3.0.RELEASE) с Spring (3.2.2.RELEASE) в одном проекте и сталкиваюсь с какой-то странной проблемой. Я использую конфигурацию на основе xml, как указано ниже.Весна и Весна Данные JPA не работают совместно

<context:annotation-config/> 
<context:component-scan base-package="x.y.z.services"/> 

Используя эту конфигурацию для сканирования классов, украшенных @Component, @Service и @Named аннотациями.

<jpa:repositories base-package="x.y.z.repo"/> 

Использование этой конфигурации для сканирования всех интерфейсов, расширяющих JpaRepository. Эти интерфейсы вводятся в классы Service следующим образом.

@Service 
public class UserServiceImpl implements UserService { 

    private UserRepository userRepository; 

    @Inject 
    public void setUserRepository(UserRepository userRepository) { 
      this.userRepository = userRepository; 
    } 

    @Override 
    public List<User> listUsers() { 
      return userRepository.findAll(); 
    } 
} 

Эта конфигурация работает, как ожидается, без каких-либо проблем. Но когда я добавляю следующую конфигурацию, я получаю BeanCreationException для UserRepository.

<bean id="securityRealm" class="x.y.z.Realm"> 
     <property name="userService"> 
      <bean class="x.y.z.services.UserServiceImpl"/> 
     </property> 
    </bean> 

И вот код Java для Realm и UserRepository.

public class Realm extends AuthorizingRealm implements IRealm { 

    private UserService userService; 

    @Inject 
    public void setUserService(UserService userService) { 
     this.userService = userService; 
    } 

    @Override 
    protected AuthenticationInfo doGetAuthenticationInfo(
    AuthenticationToken token) throws AuthenticationException { 
     return null; 
    } 

} 

public interface UserRepository extends JpaRepository<User, String> { 

} 

В соответствии с выше конфигурации, Spring может создать компонент для UserService, но не в состоянии создать UserRepository боб.

Я могу получить эту ошибку, сканируя x.y.z.Realm и украсив ее аннотацией @Service. Но это будет очень большое ограничение и проблема дизайна для моего приложения.

AFAICT, Spring не может создать компонент для UserRepository, поскольку его класс реализации недоступен и должен быть предоставлен конфигурацией jpa: репозиториев. Я вижу, что данные Spring и Spring JPA не работают вместе.

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему. Ниже находится стоп-кадр об исключении.

2013-04-30 21:44:04.745:INFO:/web:Initializing Spring root WebApplicationContext 
    2013-04-30 21:44:07,009 [ERROR] [main] [org.springframework.web.context.ContextLoader] - Context initialization failed 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource [META-INF/Test-web/security-config.xml]: Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testShiroRealm': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: x.y.z.core.service.UserService x.y.z.core.security.testShiroRealm.userService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void x.y.z.core.service.internal.UserServiceImpl.setUserRepository(x.y.z.repo.UserRepository); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [x.y.z.repo.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
     at org.springframework.context.support.AbstractApplicationContext.registerBeantesttProcessors(AbstractApplicationContext.java:753) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
     at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:764) 
     at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:406) 
     at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:756) 
     at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:242) 
     at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221) 
     at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699) 
     at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
     at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90) 
     at org.eclipse.jetty.server.Server.doStart(Server.java:263) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
     at runjettyrun.Bootstrap.main(Bootstrap.java:80) 
    ... 34 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void x.y.z.core.service.UserServiceImpl.setUserRepository(x.y.z.repo.UserRepository); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [x.y.z.repo.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:601) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) 
    ... 45 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [x.y.z.repo.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:558) 
    ... 47 more 
+0

Можете ли вы показать '' Realm' и UserRepository' классы? –

+0

Привет, Sotirios .. отредактировал вопрос с указанными классами. –

+1

Попробуйте wih ''. Можете ли вы опубликовать стек? –

ответ