Java @自动连线批注不起作用,它返回NullPointerException错误。我怎么能修好它?

Java @自动连线批注不起作用,它返回NullPointerException错误。我怎么能修好它?,java,swing,spring-boot,Java,Swing,Spring Boot,我尝试了很多方法来纠正这个错误,但都没有成功。 我使用spring框架和swing库开发了一个简单的项目。 为了简单起见,我使用swing创建了我的UI。 我没有使用web依赖,因为我不需要它。 我的主要目标是使用spring框架创建一个数据库和业务逻辑,并提取数据来填充GUI中创建的表和文本字段。 然而,@Autowired并不适用于整个项目。我检查了很多次以了解真正的实现,但没有发现任何错误。也许这是秋千的副作用或其他什么,但我不知道。你们能再检查一次来解决这个问题吗 当运行时到达控制器类中

我尝试了很多方法来纠正这个错误,但都没有成功。 我使用spring框架和swing库开发了一个简单的项目。 为了简单起见,我使用swing创建了我的UI。 我没有使用web依赖,因为我不需要它。 我的主要目标是使用spring框架创建一个数据库和业务逻辑,并提取数据来填充GUI中创建的表和文本字段。 然而,@Autowired并不适用于整个项目。我检查了很多次以了解真正的实现,但没有发现任何错误。也许这是秋千的副作用或其他什么,但我不知道。你们能再检查一次来解决这个问题吗

当运行时到达控制器类中的密码securityService.doctorLoginusername时,它会给出NullPointerException

包含行/Controller.java

import org.springframework.beans.factory.annotation.Autowired;

@Transactional(propagation = Propagation.NEVER)
public class Controller {
public static Controller controller;
@Autowired
SecurityServiceInterface securityService;

public static Controller getController() {
    if(controller==null) {
        controller=new Controller();
    }
    return controller;
}

public boolean validateLogin(String username,String password,String user) {

    switch(user) {
        case "Doctor": 
            securityService.doctorLogin(username, password);
            break;
        case "Patient": 
             securityService.patientLogin(username,password);
        case "Nurse":
            return securityService.nurseLogin(username, password);
        case "Relative":
            return securityService.relativeLogin(username, password);
    }
    return false;
}
}
包含行/serviceinpl.java

import org.springframework.beans.factory.annotation.Autowired;

@Service("SecurityServiceInterface")
@Transactional(propagation = Propagation.REQUIRED)
public class ServiceImpl implements SecurityServiceInterface {

@Autowired
private DoctorRepository doctorRepo;

@Autowired
private NurseRepository nurseRepo;

@Autowired
private PatientRepository patientRepo;

@Autowired
private RelativeRepository relativeRepo;

@Autowired
private DoctorPatientRepository doctorPatientRepo;

@Override
public boolean doctorLogin(String userName,String password){
    try {
        Doctor doctor=doctorRepo.findDoctor(userName);
        if(doctor.getPassword()==password) {
            return true;
        }
        return false;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

@Override
public boolean patientLogin(String userName,String password) {
    System.out.println("hereee");
    Patient patient=patientRepo.findPatient(userName);
    if(patient!=null) {
        if(patient.getPassword()==Encryption.sha256Encrypt(password)) {
            return true;}
        return false;
    }
    return false;
}

@Override
public boolean nurseLogin(String userName,String password) {
    Nurse nurse=nurseRepo.findNurse(userName);
    if(nurse!=null) {
        if(nurse.getPassword()==Encryption.sha256Encrypt(password)) {
            return true;}
        return false;
    }
    return false;
}
包含行/main.java

@SpringBootApplication
public class NetworkSecurity1Application {
private static final Logger logger = 
LoggerFactory.getLogger(NetworkSecurity1Application.class);
public static void main(String[] args) {
    SpringApplicationBuilder builder = new SpringApplicationBuilder(NetworkSecurity1Application.class);
    builder.headless(false).run(args);
}
@Bean
public CommandLineRunner setup(PatientRepository patientRepo,DoctorRepository doctorRepo) {
    return (args) -> {
        logger.info("Preloading " + patientRepo.save(new Patient("samet", "calis","12.12.2010")));
        doctorRepo.save(new Doctor("ali","veli","sa"));
        logger.info("The sample event data has been generated");
                try {
         ApplicationContext context = new AnnotationConfigApplicationContext(SpringContext.class); 
            LoginView loginView=(LoginView) context.getBean("loginView");
            loginView.setVisible(true);
                }catch(Exception e) {
                    e.printStackTrace();
                }
    };
}
}控制器不是SpringBean。不要认为自动布线在这些条件下可以工作。只有Springbean可以以这种方式注入依赖项

因此,像其他类一样对其进行注释。例如:

@Component
@Transactional(propagation = Propagation.NEVER)
public class Controller {...}
实例化bean的另一种方法是在将用作工厂的方法中使用@bean注释来创建bean并返回它,但您也不使用它

还请注意,@Autowired在默认情况下不是可选的。
因此,如果您在spring容器加载时得到的是NullPointerException而不是依赖项解析异常,那么您几乎可以肯定底层类不是bean。

可能是“@Controller”是否与Controller类正确匹配?除了“@Service”,没有名为@Controller的批注。@Deadpool同意。但我犹豫了because@Transactionalpropagation=传播。控制器的“从不”真的很奇怪。。。