我创建了一个实用程序类,它将包含一些不属于标准控制器的功能,例如同步和提取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
的包中,该包也位于根目录中。
在此设置/配置中我做错了什么?
答案 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);
}