![](/img/trans.png)
[英]Service bean not autowired properly in Spring Rest Controller
[英]@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.