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