Spring 尽管已自动装配,但存储库为空

Spring Repository is null despite being autowired

我正在尝试为应用程序创建用户登录系统。该登录系统的工作原理是允许用户注册个人资料并将其保存到数据库中。然后在 logininterface class 中创建一个登录界面,用户在其中输入他们的用户名和密码。这个 class 然后应该调用访问存储库的用户服务,以在数据库中找到用户名和密码。尝试从数据库检索用户的详细信息时问题仍然存在,存储库使用 returns null。我认为这是因为它没有被正确初始化,但是我找不到正确的方法来初始化存储库。代码片段如下:

主要class

@SpringBootApplication
public class Application implements ApplicationRunner {

    @Autowired
    UserRepo userRepo;

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }


    @Override
    public void run(ApplicationArguments args) throws Exception {


        System.setProperty("java.awt.headless", "false");

      
        LoginInterface.createLogin();
    }
}

用户存储库

@Repository
public interface UserRepo extends JpaRepository<User, Long> {
    Optional<User> findByuserName(String userName);
}

用户服务

@Service
public class UserService implements UserDetailsService {


    private final static String not_found = "user with username %s not found";

    @Autowired
    public UserRepo userRepo;

    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return userRepo.findByuserName(username).orElseThrow(() -> new UsernameNotFoundException(String.format(not_found, username)));
    }
}

登录界面

public class LoginInterface implements ActionListener {


    private UserService userService = new UserService();

    public static void createLogin(){
        button.addActionListener((ActionListener) new LoginInterface());

      

    }

    @Override
    public void actionPerformed(ActionEvent e) {


        String user = username.getText();
        String password = username.getText();

        User theUser = (User) userService.loadUserByUsername(user);
        String theUsername = theUser.getUsername();
        String thePassword = theUser.getPassword();

        if(user.equals(theUsername) && password.equals(thePassword)){
            JOptionPane.showMessageDialog(null, "Login Successful");
        }
        else{
            JOptionPane.showMessageDialog(null, "Username or Password mismatch");
        }
    }
}

尝试 injecting/autowiring UserService 而不是在 LoginInterface 中手动实例化它。

您的代码中的问题在这里:

private UserService userService = new UserService();

您希望容器通过依赖注入创建对象,但您却手动创建了它。它不是那样工作的。

尝试这样的事情:

@Service
public class LoginInterface implements ActionListener {
   //
   @Autowired
   private UserService userService
   //
}