这个问题在这里已经有答案了:
为什么我的spring@autowired字段为空(22个答案)
什么是nullpointerexception,如何修复它(12个答案)
三个月前关门了。
我想我和豆子泉有问题,我不知道怎么解决。这是我的密码:
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类中需要哪个注解吗?
1条答案
按热度按时间ctrmrzij1#
UserService
不是一个Bean
. 添加@Service
注解。它还需要实现服务。