微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring:无法调用服务,因为它为空

如何解决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 举报,一经查实,本站将立刻删除。