我有一个存储库
,通过它我可以从Elasticsearch获取数据。当我发送 GEt
请求时,它工作正常。
我需要来自 Elasticsearch 的数据,而无需发送 GET
请求,我已为其编写了 Service
并在 Service< 中注释了该存储库
使用 @Autowired
的类。
存储库
@Repository
public interface RecipeDtoRepository extends
ElasticsearchRepository<RecipeDto, Integer> {}
Controller
@RestController
@RequestMapping("/repo")
public class RecipeRepoController {
@Autowired
public RecipeDtoRepository recipeDtoRepository;
@GetMapping("/all")
public String getRecipes() {
List<RecipeDto> recipe_list = new ArrayList<>();
recipeDtoRepository.findAll().forEach(recipe_list::add);
return recipe_list.toString();
}
服务
@Service
@Component
public class ClusterService implements ApplicationContextAware {
@Autowired
public RecipeDtoRepository recipeDtoRepository;
List<RecipeDto> recipe_list = new ArrayList<>();
new ClusterService(). applicationContext.getBean(RecipeRepoController.class).recipeDtoRepository.findAll().forEach(recipe_list::add);
}
@Override
public void setApplicationContext(ApplicationContext
applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
问题
当使用 GET 请求调用 Controller 中的方法时,它工作正常,但是当我使用 Service 类调用它时,它抛出 NullPointerException ,它据我所知不应该。我读过一篇文章,其中建议在 Service
类中获取 Bean
,您可以看到我已经使用 ApplicationContext
完成了它,但它抛出了那个异常(exception)。我在不使用 ApplicationContext 的情况下尝试过,在这种情况下它也会抛出 NullPointerException 。我最近两天一直在研究这个问题,但找不到解决方案。
@Service
@Configurable
public class ClusterService {
@Autowired
public RecipeDtoRepository recipeDtoRepository;
private String getRecipes() {
List<RecipeDto> recipe_list = new ArrayList<>();
recipeDtoRepository.findAll().forEach(recipe_list::add);
return recipe_list.toString();
}
public static void main(String[] a) {
ClusterService clusterService = new ClusterService();
clusterService.getRecipes();
}}
最佳答案
删除上下文感知,并且不要从 Controller 调用存储库的实例,因为您已经注入(inject)了它 就这样做
public void addThings(){
this.recipeDtoRepository.findAll().forEach(recipe_list::add)
}
关于java - 存储库对象未在服务类中 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977560/