2014-11-14 2 views
2

Я хочу использовать интерфейс MongoRepository, но у меня есть исключение BeanCreationException. Элементы ComponentScan и MappingBasePackage заполняются правильно.Autowired MongoRepository реализация бросает BeanCreationException при запуске приложения

Вот мой код:

(класс Джерси) @Component @Path ("навыки") общественного класса SkillREST {

@Autowired 
    private UserService userService;  

    @POST 
    @Path("/{token}") 
    @Produces({MediaType.APPLICATION_JSON}) 
    public List<Skill> addSkill(@PathParam("token") String token, Skill skill){ 
     return userService.getAllSkills(); 
    } 
} 

Вот служба, в которой хранилище не Autowired правильно :

@Component 
public class UserService { 
    @Autowired 
    SkillRepository skillRepository; 

    public List<Skill> getAllSkills(){ 
     return skillRepository.findAll(); 
    } 
} 


@Repository 
public interface SkillRepository extends MongoRepository<Skill, String> { 
} 

Spring класс конфигурации:

@Configuration 
@PropertySource("classpath:mongodb.properties") 
@EnableMongoRepositories 
@ComponentScan("com.headlezz") 
public class SpringMongoConfig extends AbstractMongoConfiguration { 
    @Inject 
    Environment environment; 
    @Override 
    public String getDatabaseName() { 
     return environment.getProperty("db.name"); 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     return new MongoClient("127.0.0.1"); 
    } 

    @Override 
    protected String getMappingBasePackage() { 
     return "com.headlezz.repository"; 
    } 

} 

А вот выход:

2014-11-14 17:00:49.693:WARN::Failed startup of context [email protected]{/nonamer,/home/pooh/workspace/java/nonamer/src/main/webapp} 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.headlezz.repository.SkillRepository com.headlezz.service.UserService.skillRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.headlezz.repository.SkillRepository] 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)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:293)... 

Может кто-нибудь объяснить, почему это происходит?

ответ

7

Вы должны явно указать пакет (ы), в котором находятся ваши репозитории. Добавление

@EnableMongoRepositories(basePackages="com.headlezz.repository") 

или

@EnableMongoRepositories("com.headlezz.repository") 

должен сделать трюк.

+0

Привет, @helmy. Посмотрите мой фрагмент кода сверху с помощью SkillRepository. Я упомянул об этом аннотации, но это не сработало. Поэтому должна быть другая причина. – Reynard

+1

Извините, я вижу это сейчас. Можете ли вы попробовать изменить аннотацию конфигурации на @EnableMongoRepositories (basePackages = "com.headlezz.repository") – helmy

+0

@helmy, вы должны обновить свой ответ с информацией об указании опции basePackages в '@ EnableMongoRepositories', которая должна работать. –