@Repository 接口上的 Bean 创建错误
Bean creation error on @Repository interface
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface FormRepository extends MongoRepository<Form, Integer> {
Optional<Form> findById(Integer formId);
}
这是我创建的 mongo 存储库。我正在按如下方式访问它:
@Service
public class FormServiceImpl implements FormService {
@Autowired
FormRepository formRepository;
@Override
public List<Question> getQuestions(Integer formId, ){
List<Question> questionList = new ArrayList<>();
..........
......................
........ initialise questionlist .............
......................
formRepository.save(new Form(questionList, "firstForm"));
return questionList;
}
}
我收到错误 ->
***************************
APPLICATION FAILED TO START
***************************
Description:
Field formRepository in *.service.impl.FormServiceImpl required a bean of type '*.service.FormRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type '*.service.FormRepository' in your configuration.
Process finished with exit code 1
我的想法:
@Repository 应该足以将 FormRepository 注册为 bean。然而,事实并非如此。我无法将 FormRepository 接口注册为 bean。上面的两个文件位于同一个包中。
我已经用 * 替换了前缀路径 - 但请放心 * 在任何地方都具有相同的含义。
如果有任何其他日志,请告诉我。
编辑:
我在主应用程序中添加了@EnableMongoRepositories class。这导致了这个错误 ->
2022-04-24 19:20:29.085 ERROR 2941 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field formRepository in *.service.impl.FormServiceImpl required a bean named 'mongoTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean named 'mongoTemplate' in your configuration.
Process finished with exit code 1
我认为MongoTemplate 和MongoRepository 是两个截然不同的东西。为什么我的 mongo 存储库需要依赖 MongoTemplate?
由于您正在使用 mongo,因此您需要添加额外的注释。
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = FormRepository .class)
public class MainClass {}
还要确保您的文件夹结构正确。
对于其他问题,您应该在 'POM'
中添加依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
都是关于mongo配置的。
希望这有帮助。
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface FormRepository extends MongoRepository<Form, Integer> {
Optional<Form> findById(Integer formId);
}
这是我创建的 mongo 存储库。我正在按如下方式访问它:
@Service
public class FormServiceImpl implements FormService {
@Autowired
FormRepository formRepository;
@Override
public List<Question> getQuestions(Integer formId, ){
List<Question> questionList = new ArrayList<>();
..........
......................
........ initialise questionlist .............
......................
formRepository.save(new Form(questionList, "firstForm"));
return questionList;
}
}
我收到错误 ->
***************************
APPLICATION FAILED TO START
***************************
Description:
Field formRepository in *.service.impl.FormServiceImpl required a bean of type '*.service.FormRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type '*.service.FormRepository' in your configuration.
Process finished with exit code 1
我的想法: @Repository 应该足以将 FormRepository 注册为 bean。然而,事实并非如此。我无法将 FormRepository 接口注册为 bean。上面的两个文件位于同一个包中。 我已经用 * 替换了前缀路径 - 但请放心 * 在任何地方都具有相同的含义。 如果有任何其他日志,请告诉我。
编辑:
我在主应用程序中添加了@EnableMongoRepositories class。这导致了这个错误 ->
2022-04-24 19:20:29.085 ERROR 2941 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field formRepository in *.service.impl.FormServiceImpl required a bean named 'mongoTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean named 'mongoTemplate' in your configuration.
Process finished with exit code 1
我认为MongoTemplate 和MongoRepository 是两个截然不同的东西。为什么我的 mongo 存储库需要依赖 MongoTemplate?
由于您正在使用 mongo,因此您需要添加额外的注释。
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = FormRepository .class)
public class MainClass {}
还要确保您的文件夹结构正确。
对于其他问题,您应该在 'POM'
中添加依赖项<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
都是关于mongo配置的。 希望这有帮助。