@Autowired注释不起作用,它返回NullPointerException错误。我该如何解决?

时间:2019-01-06 15:13:12

标签: java swing spring-boot

我尝试了很多方法来纠正此错误,但我无法成功。 我使用spring框架和swing库开发了一个简单的项目。 我使用swing创建了UI很容易。 我没有使用网络依赖,因为我不需要它。 我的主要目的是使用spring框架创建数据库和业务逻辑,并提取数据以填充表和GUI中创建的文本字段。 但是,@Autowired并不能在整个项目中正常工作。我多次检查了真正的实现,但没有发现任何错误。也许是挥杆或其他任何事情的副作用,但我不知道。您可以再花一点时间解决问题吗?

当运行时达到控制器类中的securityService.doctorLogin(username,password)时,它将给出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;
}
}

包括行/ServiceImpl.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;
}

include lines / 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();
                }
    };
}

}

1 个答案:

答案 0 :(得分:1)

Controller不是Spring Bean。不要以为自动接线可以在这些情况下工作。只有Spring Bean才能以这种方式注入依赖项。

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

@Component
@Transactional(propagation = Propagation.NEVER)
public class Controller {...}

实例化bean的另一种方法是在方法中使用@Bean批注,该方法将用作工厂来创建bean并返回它,但您也不使用它。

请注意,@Autowired在默认情况下不是可选的。
因此,如果在春季容器加载时收到NullPointerException而不是依赖项解析异常,则几乎可以确定基础类不是bean。