2016-08-21 68 views
0

我试图实现与注释MongoDB的一个CRUD例子,但我收到此错误信息:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型[]的排位豆发现依赖

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'levelServices': Unsatisfied dependency expressed through field 'levelRepository': No qualifying bean of type [com.thegarage.repositories.LevelRepository] found for dependency [com.thegarage.repositories.LevelRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.thegarage.repositories.LevelRepository] found for dependency [com.thegarage.repositories.LevelRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84) 
at com.thegarage.services.App.main(App.java:24) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.thegarage.repositories.LevelRepository] found for dependency [com.thegarage.repositories.LevelRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) 
... 14 more 

我试图看看不同的例子在stackoverflow,但我无法得到解决方案。

这里是我下面的代码:

@Document(collection = "parking_spaces") 
public class Location { 

@Id 
private String id; 
private int locationNumber; 
private boolean reserved; 
..... 
} 

和库

@Repository 
public interface LocationRepository extends MongoRepository<Location, String>{ 

Location findByLocationNumber (int locationNumber); 

} 

和服务

@Service 
@Transactional 
public class LevelServices { 

@Autowired 
private LevelRepository levelRepository; 

@SuppressWarnings("unused") 
private void addNewLevel(Level level) { 
    levelRepository.save(level); 
} 
..... 
} 

和主类

public class App { 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    // For Annotation 
    AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); 
//  MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate"); 
    LocationService locationService = context.getBean(LocationService.class); 

    Location location = new Location("1",1,true); 


    // save 
    locationService.addNewLocations(location); 

    System.out.println("1. location : " + location); 

    context.close(); 

} 

} 

,并在这里结束我的配置类

@Configuration 
@ComponentScan(basePackages={"com.thest.repositories", "com.thest.services", "com.thest.config"}) 
public class MongoConfig{ 

@Autowired 
private Mongo mongo;  
/* 
* Factory bean that creates the com.mongodb.Mongo instance 
*/ 
@Bean 
public MongoClientFactoryBean mongo() { 
     MongoClientFactoryBean factoryBean = new MongoClientFactoryBean(); 
     factoryBean.setHost("localhost"); 
     return factoryBean ; 
} 

@Bean 
public MongoTemplate mongoTemplate() throws Exception{ 
    return new MongoTemplate(mongo, "thegaragedb"); 
} 

}

我错过了什么?

+0

您需要'@EnableMongoRepositories(...)'在您的cofig类。请参阅http://docs.spring.io/spring-data/data-mongo/docs/1.9.2.RELEASE/reference/html/#repositories.create-instances.java-config –

回答

2

您需要将@EnableMongoRepositories("package name")添加到您的配置文件中,其中软件包名称是您使用mongorepository的软件包的名称。