在应该自动连接的服务上运行时抛出空指针异常

时间:2018-01-15 21:10:20

标签: java spring spring-boot autowired

我创建了一个实用程序类,它将包含一些不属于标准控制器的功能,例如同步和提取API数据。我有一个非常简单的Repository类,它扩展了CrudRepository

//TransactionCategoryRepository.java
@Repository
public interface TransactionCategoryRepository extends CrudRepository<TransactionCategory, Integer> {
}

然后我有一个服务类,目前也非常简单:

//TransactionCategoryService.java
@Service
public class TransactionCategoryService {

    private TransactionCategoryRepository transactionCategoryRepository;

    @Autowired
    public TransactionCategoryService(TransactionCategoryRepository repository) {
        this.transactionCategoryRepository = repository;
    }

    public void saveTransactionCategory(TransactionCategory transactionCategory) {
        transactionCategoryRepository.save(transactionCategory);
    }

我的实用程序类利用TransactionCategoryService,我试图将其包含在@Autowired中:

//Utilities.java
@Controller
public class PlaidUtilities {

    private Logger logger = LoggerFactory.getLogger(PlaidUtilities.class.getSimpleName());

    private PlaidClient mPlaidClient;

    @Autowired
    TransactionCategoryService mTransactionCategoryService;

    @Autowired
    TransactionRepository mTransactionCategoryRepository;
....

当我使用mTransactionCategoryService保存新实体时,我得到空指针异常。 IntelliJ之前在我的@Autowired注释上发出了警告,要求成员类需要在spring bean中声明。添加@Controller注释会使这些注释消失,但我不确定这是否是正确的做法;我试过这个,因为这是这个类和另一个类之间的唯一区别,@ Autowires以完全相同的方式但没有这个问题。

以这种方式使用Autowired的其他类位于名为controllers的包中,该包位于根目录中。此Utilities类位于名为util的包中,该包也位于根目录中。

在此设置/配置中我做错了什么?

1 个答案:

答案 0 :(得分:-2)

您忘记在服务层中自动装配存储库。

//TransactionCategoryService.java
@Service
public class TransactionCategoryService {
    @Autowired //MISSING THIS
    private TransactionCategoryRepository transactionCategoryRepository;

    @Autowired
    public TransactionCategoryService(TransactionCategoryRepository repository) {
        this.transactionCategoryRepository = repository;
    }

    public void saveTransactionCategory(TransactionCategory transactionCategory) {
        transactionCategoryRepository.save(transactionCategory);
    }