【发布时间】:2018-06-23 14:33:13
【问题描述】:
在对我的服务进行操作时,我收到一个空指针异常,因为我的服务没有被自动装配到类中。我已经实现了这个类的存储库和服务,与这个应用程序中的其他人完全相同,我以前没有遇到过这个问题。该课程确实警告 Autowire 的问题,但我不知道如何解决它们:
Autowired members must be defined in valid spring bean
同样,这与其他类的设置相同,我没有这个问题。在服务类中,它抱怨存储库无法自动装配到构造函数中,因为有多个相同类型的 bean。我的其他服务类也显示此警告,但在自动装配到类中并对其进行操作时没有问题。以下定义,请询问任何其他有帮助的上下文。
//TransactionCategoryRepository.java
@Repository("transactionCategoryRepository")
public interface TransactionCategoryRepository extends
CrudRepository<TransactionCategory, Integer> {
}
--
//TransactionCategoryService.java
@Service("transactionCategoryService")
public class TransactionCategoryService {
private TransactionCategoryRepository transactionCategoryRepository;
@Autowired
public TransactionCategoryService(TransactionCategoryRepository repository) {
this.transactionCategoryRepository = repository;
}
public void saveTransactionCategory(TransactionCategory transactionCategory) {
transactionCategoryRepository.save(transactionCategory);
}
}
--
//Utilities.java
public class PlaidUtilities {
private Logger logger =
LoggerFactory.getLogger(PlaidUtilities.class.getSimpleName());
private PlaidClient mPlaidClient;
@Autowired
TransactionCategoryService mTransactionCategoryService;
...
在 TransactionCategoryService.java 中的respository 上引发了多 bean 警告,在 Utilities.java 中引发了 Autowired 定义警告。稍后在 Utilities.java 中操作 mTransactionCategoryService 时出现破坏性空指针异常错误。
【问题讨论】:
-
如果您有多个符合自动装配组件类型的 bean,您需要使用
@Qualifier指定您想要的。但这不会给你这个例外,你需要检查你的 bean 是否确实被创建,如果你在某个包中搜索 bean,请确保你的 repo 在正确的包中。 -
@Snickers3192 我很抱歉,但我是 Spring 和 Spring Boot 的新手,并不完全确定你的建议。
search for beans in a certain package是什么意思?该定义只出现在一个地方,这很奇怪,因为 IntelliJ 似乎意识到了这一点;当它列出 bean 的两个位置时,它列出了相同的位置 (TransactionCategoryRepository.java)。 -
可能值得重申的是,我有其他存储库和服务以完全相同的方式设置并且没有这个问题。
-
如果是这种情况,您需要提供更多信息,也许先重做一些东西,看看是否有效。
标签: java spring spring-boot autowired