当前位置: 首页 > 知识库问答 >
问题:

Controller类中的@AutoWired服务bean将无法识别

卢光誉
2023-03-14
@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类的方法不会出现在控制器中...我只能访问接口中的方法,但不能访问其他实现的方法。我尝试使用限定符,甚至制作了一个config类来在按接口注入bean时实例化impl类。

@Configuration
public class OrderConfig {

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

谁能告诉我我做错了什么?

共有1个答案

葛越
2023-03-14

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

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

@Autowired
private final UserDetailsServiceImpl userDetailsService;

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

 类似资料:
  • 这是我的spring控制器类KalamController Hibernate配置xml文件 EmployeeServiceImpl.Java档案 最后是 当我运行程序时,我得到以下错误 请告诉我哪里出了问题。我是否忘记了xml文件中的任何配置?我的意图是了解如何使用@AutoWired注释在controller中调用服务。

  • 问题内容: 我的测试课: 我在行上得到一个空指针异常: 在精确的给出空指针异常 如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法? 从评论中复制: 用简单的术语来说.. beanClass是具有某些方法的接口..我用 注释标记了该beanClass。.banClass 是由具有方法实现的beanClassImpl类实现的。.我需要在我的

  • 我想将spring bean从一个包上下文导出到另一个包上下文。当这个bean没有MongoClient这样的接口时,问题就开始了。第一个bundle上下文注册Mongoclient,但当我想将它公开给另一个时,我会从reference bundle得到:“no bean could found in the registry for mongo of type:com.mongodb.mongo

  • 我有一些UserService对用户实体进行操作。我创建了自己的注释和ConstraintValidator类作为实现 我需要将UserService注入到ConstraintValidator中。而且,正如spring文档所说,在注册bean之后: 不幸的是,它对我没有作用。我在字段(在实现ConstraintValidator的类内)使用NullPointerException累加stackt

  • 我正在使用hibernate(Hibernate Maven5.2.15.Final, Mysql-连接器Maven 8.0.9-rc)whith mysql 5.7在linux上的lampp环境所以。 我在意大利(中欧夏季时间),3月25日,连接数据库出现以下错误: 服务器时区值“CEST”无法识别或表示多个时区。如果要利用时区支持,必须配置服务器或JDBC驱动程序(通过serverTimezo