簡體   English   中英

Controller Class 中的 @Autowired 服務 bean 將無法識別這些方法

[英]@Autowired service bean in Controller Class won't recognize the methods

我有這個課程:

@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;


}}
@Controller
@RequiredArgsConstructor
public class OrderController {

    private final OrderService orderService;
@Autowired
    private final UserDetailsService userDetailsService;


    @GetMapping("/orderlist")
    public String showOrdeList(Model model, @AuthenticationPrincipal Authentication authentication){
userDetailsService.getCurrentlyLoggedUser

    }
}

我想知道為什么來自 UserDetailsServiceImpl class 的方法不會出現在 controller 中......我只能訪問接口中的方法,但不能訪問除它們之外實現的方法。 我嘗試使用限定符,甚至在通過接口注入 bean 時進行了配置 class 來實例化 impl class。

@Configuration
public class OrderConfig {

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

誰能告訴我我做錯了什么?

無法訪問在UserDetailsServiceImpl但未在UserDetailsService中定義的方法,因為您通過接口UserDetailsService注入服務並且編譯器不知道將在運行時注入哪個實現。

因此,您需要使用 class 公開或注入服務的所有方法定義自己的接口。

@Autowired
private final UserDetailsServiceImpl userDetailsService;

我會推薦一個自定義接口來擴展UserDetailsService並使用您的自定義接口注入您的服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM