我尝试了很多方法来纠正此错误,但我无法成功。
我使用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();
}
};
}
}
答案 0 :(得分:1)
Controller
不是Spring Bean。不要以为自动接线可以在这些情况下工作。只有Spring Bean才能以这种方式注入依赖项。
因此像其他班级一样对其进行注释。例如:
@Component
@Transactional(propagation = Propagation.NEVER)
public class Controller {...}
实例化bean的另一种方法是在方法中使用@Bean
批注,该方法将用作工厂来创建bean并返回它,但您也不使用它。
请注意,@Autowired
在默认情况下不是可选的。
因此,如果在春季容器加载时收到NullPointerException
而不是依赖项解析异常,则几乎可以确定基础类不是bean。