Java @控制器类中的自动连线服务bean赢得';我不认识这些方法

Java @控制器类中的自动连线服务bean赢得';我不认识这些方法,java,spring,spring-mvc,dependency-injection,javabeans,Java,Spring,Spring Mvc,Dependency Injection,Javabeans,我有以下课程: @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserRepository userRepository; @Autowired private BCryptPasswordEncoder passwordEncoder; @Autowired private EntityManager entityManager; @O

我有以下课程:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {


@Autowired
private UserRepository userRepository;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Autowired
private EntityManager entityManager;

    @Override
    public UserDetails loadUserByUsername( String username) throws UsernameNotFoundException {
        Optional<User> userOptional = userRepository.findUserByUsername(username);
        User user = userOptional.orElseThrow(
                ()->new UsernameNotFoundException("Username not found in the database")
        );
        return new MyUserDetails(user);
    }
    

 public void saveUser(User user){

User newUser=new User();
newUser.setUsername(user.getUsername());
newUser.setPassword(passwordEncoder.encode(user.getPassword()));
newUser.setEnabled(true);
newUser.setRoles(List.of(entityManager.find(Role.class,1)
));
userRepository.save(newUser);
    }

    public void deleteUser(User user){
        userRepository.delete(user);
    }

public UserDetails getCurrentlyLoggedUser(Authentication authentication){
   Object principal = authentication.getPrincipal();
   if(principal instanceof UserDetails){
       String username=((User) principal).getUsername();
       UserDetails loggedUser = loadUserByUsername(username);
       return loggedUser;
   }

   return null;


}}
我想知道为什么UserDetailsServiceImpl类中的方法不会出现在控制器中。。。 我只能从接口访问方法,但不能访问除此之外实现的方法。 我尝试使用限定符,甚至在通过接口注入bean时创建了一个config类来实例化impl类

@Configuration
public class OrderConfig {

    @Bean("userDetailsService")
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }

有人能告诉我我做错了什么吗?

UserDetailsServiceImpl
中定义但在
UserDetailsService
中定义的方法不可访问,因为您是通过接口
UserDetailsService
注入服务的,而编译器不知道在运行时将注入哪个实现

因此,您需要使用所有要按类公开或注入服务的方法定义自己的接口

@Autowired
私有最终用户详细信息服务impl用户详细信息服务;

我建议使用自定义接口扩展
UserDetailsService
并使用自定义接口注入您的服务。

UserDetailsServiceImpl
中定义但不在
UserDetailsService
中定义的方法无法访问,因为您是通过接口
UserDetailsService
注入您的服务的编译器不知道在运行时将注入哪个实现

@Configuration
public class OrderConfig {

    @Bean("userDetailsService")
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }
因此,您需要使用所有要按类公开或注入服务的方法定义自己的接口

@Autowired
私有最终用户详细信息服务impl用户详细信息服务;
我建议使用自定义接口扩展
UserDetailsService
,并使用自定义接口注入服务

@Configuration
public class OrderConfig {

    @Bean("userDetailsService")
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }