如何解决Spring:无法调用服务,因为它为空
我想我遇到了 bean spring 的问题,我不知道如何解决。这是我的代码:
package tse.poc.utils;
import java.time.LocalDateTime;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import lombok.extern.slf4j.Slf4j;
import tse.poc.dao.ProjectRepository;
import tse.poc.dao.TimeRepository;
import tse.poc.dao.UserRepository;
import tse.poc.domain.Project;
import tse.poc.domain.Time;
import tse.poc.domain.User;
@Configuration
@Slf4j
public class LoadDatabase {
@Bean
@Profile("!test")
CommandLineRunner initDatabase(ProjectRepository projectRepository,TimeRepository timeRepository,UserRepository userRepository) {
return args -> {
initMainDatabase(userRepository,projectRepository,timeRepository);
SummaryPDF spdf = new SummaryPDF();
spdf.monthSummary(1L,"FEBRUARY");
log.info("PDF has been initialized");
};
}
package tse.poc.utils;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.pdf.PdfWriter;
import tse.poc.domain.User;
import tse.poc.service.UserService;
@Configuration
public class SummaryPDF {
@Autowired
private UserService userService;
public void monthSummary(Long userId,String month) throws FileNotFoundException,DocumentException {
Document document = new Document();
PdfWriter.getInstance(document,new FileOutputStream("iTextHelloWorld.pdf"));
User user = this.userService.findUserOnId(userId);
document.open();
Font font = FontFactory.getFont(FontFactory.COURIER,16,BaseColor.BLACK);
Chunk chunk = new Chunk(user.getLastname().toupperCase()+" "+user.getFirstname(),font);
Chunk chunk2 = new Chunk(user.getRole(),font);
Chunk chunk3 = new Chunk(month + " Summary",font);
document.add(chunk);
document.add(chunk2);
document.add(chunk3);
document.close();
}
}
package tse.poc.service;
import java.util.List;
import org.springframework.stereotype.Service;
import tse.poc.domain.User;
public interface UserService {
public List<User> findAllUsers();
public User findUserOnId(Long userId);
public User createuser(User user);
public void deleteUser(User user);
public User credentialsChecking(String email,String password);
}
package tse.poc.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tse.poc.dao.UserRepository;
import tse.poc.domain.User;
import tse.poc.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public List<User> findAllUsers() {
return this.userRepository.findAll();
}
@Override
public User findUserOnId(Long userId) {
List<User> users = findAllUsers();
for (User user : users) {
if (user.getId() == userId) {
return user;
}
}
return null;
}
@Override
public User createuser(User user) {
return this.userRepository.save(user);
}
@Override
public void deleteUser(User user) {
this.userRepository.delete(user);
}
@Override
public User credentialsChecking(String email,String password) {
List<User> users = findAllUsers();
for (User user : users) {
if (user.getpassword() == password && user.getEmail() == email) {
return user;
}
}
return null;
}
}
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:807) ~[spring-boot-2.4.1.jar:2.4.1]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:788) ~[spring-boot-2.4.1.jar:2.4.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:333) ~[spring-boot-2.4.1.jar:2.4.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1]
at tse.poc.PocApplication.main(PocApplication.java:14) ~[classes/:na]
Caused by: java.lang.NullPointerException: Cannot invoke "tse.poc.service.UserService.findUserOnId(java.lang.Long)" because "this.userService" is null
at tse.poc.utils.SummaryPDF.monthSummary(SummaryPDF.java:29) ~[classes/:na]
at tse.poc.utils.LoadDatabase.lambda$0(LoadDatabase.java:29) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804) ~[spring-boot-2.4.1.jar:2.4.1]
... 5 common frames omitted
你能解释一下是哪个错误以及如何解决吗?我已经在我的测试类中使用了 UserService 但我从来没有出现过这个错误,你能告诉我我的 summaryPDF 类需要哪个注释吗?
解决方法
UserService
不是 Bean
。添加 @Service
注释。它还需要实施该服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。