Как исправить «Приложение не удалось запустить» при весенней загрузке, и оно просит определить bean-компонент - PullRequest
0 голосов
/ 18 апреля 2019

Моё весеннее загрузочное приложение запускается, но говорит, что не удалось запустить, и оно говорит следующее:

Для поля userDetailsService в com.example.security.WebSecurityConfiguration требуется компонент типа com.example.security.UserDetailsServiceImpl, который не может быть найден.

Точка впрыска имеет следующие аннотации:

  • @org.springframework.beans.factory.annotation.Autowired(required=true)

Рассмотрите возможность определения bean-компонента типа 'com.example.security.UserDetailsServiceImpl' в вашей конфигурации.

Я попытался добавить аннотации @Bean и @Service в мой класс UserDetailsServiceImpl и добавить зависимость beanutils в файл pom.xml, но он по-прежнему выдает то же сообщение о невозможности запуска.

Мой UserDetailsServiceImpl класс:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import com.example.domain.User;
import com.example.repository.UserRepository;

public class UserDetailsServiceImpl implements UserDetailsService{

    @Autowired
    private UserRepository userRepo;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User user = userRepo.findByUsername(username);

        if (user == null) {
            throw new UsernameNotFoundException("User with username: " + username + " not found");

        }
        return new CustomSpringUser (user); 
    }
}

Должно быть что-то вроде успешного запуска приложения Spring-Boot.

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

BeanUtils не поможет вам в этом случае. UserDetailsService не может быть введен должным образом, поскольку он не зарегистрирован как компонент, для которого подходят только следующие аннотации:

  • @Repository, @Service, @Controller или @Component, где я настоятельно рекомендую @Service в этом случае.

Аннотация должна быть размещена на уровне класса , поскольку вы хотите внедрить его экземпляр. Конечно, класс должен быть реализацией интерфейса, в который внедрена реализация.

@Service // must be on the class level
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserRepository userRepo;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // method implementation...
    }
}

Кроме того, я рекомендую вам прочитать следующие ссылки:

1 голос
/ 18 апреля 2019

Поместите аннотацию @Service в свой класс UserDetailsServiceImpl.

...