java - SpringBoot : Inject repository into a class defined in service layer

标签 java dependency-injection spring-boot repository

我在 SO 上搜索了类似的问题,但没有找到非常具体的答案。 我是 Springboot 的新手。我在服务层定义了一个POJO。我想将存储库注入(inject)到此类中。不知何故,它总是null。这是我的代码结构,

文件:service/ResultInstitute.java

@Document(indexName = "result_institute")
public class ResultInstitute implements Serializable {


@Inject
public CourseRepository courseRepository;

/**
 * 
 */
private static final long serialVersionUID = -2168910694195614091L;

public ResultInstitute(Institute institute)  {

    // Initialize all the values.

    for (Course course : institute.getCourses()){
        HashMap<String, String> courseDetails = courseRepository.getCourseDetails(course.getId());
        course.setCourseDetails(courseDetails);
        courses.add(course);
    }
    courses       = institute.getCourses();

    for (Course course : courses){
        subCategories.put(course.getSubCategory().getId(), course.getSubCategory().getDisplayName());
        categories.put(course.getSubCategory()
                             .getCategory()
                             .getId(), 
                       course.getSubCategory()
                             .getCategory()
                             .getDisplayName());
    }
}

public ResultInstitute (){}

private Long id;

private String code; ....

文件:repository/CourseRepository.java

public interface CourseRepository extends JpaRepository<Course,Long> {

@Query("select distinct course from Course course left join fetch course.institutes")
List<Course> findAllWithEagerRelationships();

@Query("select course from Course course left join fetch course.institutes where course.id =:id")
Course findOneWithEagerRelationships(@Param("id") Long id);

@Query(value="SELECT DISTINCT(ci.course_details) FROM course_institute ci WHERE ci.courses_id = ?1", nativeQuery = true)
HashMap<String, String> getCourseDetails(Long id);

}

每当我尝试使用courseRepository时,它都会给我NullPointerException。你能帮我解决这个问题吗?

最佳答案

在评论部分,您说您按如下方式启动 ResultInstitute 类,

ResultInstitute resultInstitute = new ResultInstitute(i); resultInstitute.locationFilterString(i);

启动是由您自己处理的,因此 @Autowired 在这种情况下不起作用。 @Autowired是一个注入(inject)bean的spring配置,因此为了注入(inject)Repository ResultInstitute应该由Spring Iteself处理。

我们必须告诉spring ResultInstitute是一个bean类,你可以将ResultIntitute类注释为@Component

@Component 
public class ResultInititute

因此,每当您想要实例化 ResultInstitute 时,请使用 @Autowired 实例化为 bean 类

@Autowired
ResultInstitute resultInstitute;

And Using the Respository in Entity class is not good thing, we have to handle this in separate section.

关于java - SpringBoot : Inject repository into a class defined in service layer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651457/

相关文章:

java - Guice 代理支持循环依赖

Spring Boot PasswordEncoder.matches 始终为 false

javascript - Thymeleaf 表单使用 ArrayList 对象提交

java - 如何使 JTable 列不包含 JTextFields,而是包含 JTextAreas?

java - 简单的 mysql/jdbc 代码导致内存泄漏?

java - 使用 web3j 检查 ERC20 合约中的余额

ssl - Spring-Boot 客户端认证配置。

java - 意向确认时如何处理用户更正?

c# - 架构问题 : use of dependency injection resulting in rubbish API

javascript - Angular : Not able to access variables in controller using service