12
Фев
2017

Правильное использование аннотации Autowired Spring

Здравствуйте, имеется простой сервер, который предоставляет данные из базы данных и конвертирует их в JSON.

Для общения с базой я использую интерфейс JpaRepository.

public interface AutoRateRepository extends JpaRepository<AutoService, Long> {
}

Помимо Repository я использую интерфейс Service:

public interface AutoRateService {
    List<AutoService> getAll();
    AutoService getById(long id);
    AutoService save(AutoService service);
    void remove(long id);
}

И вот его имплементация :

public class AutoRateServiceImpl implements AutoRateService {

    @Autowired
    AutoRateRepository repository;

    public List<AutoService> getAll() {
        return repository.findAll();
    }

    public AutoService getById(long id) {
        return repository.findOne(id);
    }

    public AutoService save(AutoService service) {
        return repository.saveAndFlush(service);
    }

    public void remove(long id) {
        repository.delete(id);
    }
}

Чтобы получить данные с базы данных, я использую объект AutoRateService, проанатировав его @Autowired в классе контроллера:

@RestController
@RequestMapping("/directory")
public class ServiceController {

    @Autowired
    private AutoRateService dataBaseService;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ResponseBody
    public List<AutoService> getData(){
        List<AutoService> dataList = dataBaseService.getAll();
        return dataList;
    }
}

В итоге я получаю следующий лог ошибок при запуске приложения:

6425 [RMI TCP Connection(3)-127.0.0.1] WARN org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceController': Unsatisfied dependency expressed through field 'dataBaseService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.webserverconfig.user.repository.service.AutoRateService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
6431 [RMI TCP Connection(3)-127.0.0.1] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
6439 [RMI TCP Connection(3)-127.0.0.1] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceController': Unsatisfied dependency expressed through field 'dataBaseService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.webserverconfig.user.repository.service.AutoRateService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)

Прочитав ошибку, я пытался добавить в аннотацию (required = true), но это не помогает. Так же я пытался добавить данную аннотацию в обоих местах, для сервиса и для репозитория, ошибки все равно летят.

Помогите решить проблему пожалуйста, как правильно нужно в данном случае использовать данную аннотацию ?

Источник: https://ru.stackoverflow.com/questions/626804/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B0%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D0%B8-autowired-spring

Share

Тебе может это понравится...