gpt4 book ai didi

java - @Autowired 注释不起作用,它返回 NullPointerException 错误。我该如何修复它?

转载 作者:行者123 更新时间:2023-12-02 10:24:42 25 4
gpt4 key购买 nike

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

当运行时间达到securityService.doctorLogin(username,password)时在 Controller 类中,它给出 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;
}

包含行/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();
}
};
}

}

最佳答案

Controller 不是 Spring Bean。不要假设 Autowiring 可以在这些条件下工作。只有 Spring bean 可以通过这种方式注入(inject)依赖项。

所以像其他类一样对其进行注释。例如:

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

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

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

关于java - @Autowired 注释不起作用,它返回 NullPointerException 错误。我该如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54062883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com