自动装入非Spring托管类(POJO)时的NullPointerException - Spring Boot

时间:2017-06-04 18:38:41

标签: java spring dependency-injection load-time-weaving

我对整个Spring Boot和依赖注入都比较新,所以请原谅这里发生的任何noob事情。我正在构建API,并且在将依赖项注入POJO资源(DTO)时遇到问题。

当我在POJO this.numComments = commentSvc.getAllForPhoto(this.getId());中调用该方法时,我得到一个NullPointerException。但是,当我从另一个spring-managed bean执行此操作并将值传递给构造函数时,它可以正常工作。

看完之后,看起来我需要对aspectJ和Load Time Weaving做些什么,但我不确定我的代码会是什么样子。

从本质上讲,我的方法看起来像这样:

PhotoResource.java (POJO)

public class PhotoResource extends BaseRepresentable {

   @Autowired
   CommentService commentSvc;

   private Long id;
   private Integer numComments;

   PhotoResource(PhotoEntity entity){
   super(entity);
   this.setId(entity.getId);
   this.numComments = commentSvc.getAllForPhoto(this.getId());
   }
}

CommentService.java

@Service
public class CommentService{
   public List<CommentResource> getAllForPhoto(Long photoId) {
   // code to get all comments for photo
   }
}

Application.java

@SpringBootApplication
public class Application {
   public static void main(String[] args) {
      SpringApplication.run(Application.class);
   }
}

1 个答案:

答案 0 :(得分:1)

除非你要求Spring容器管理bean,否则Spring不会注入依赖项。要将commentSvc注入PhotoResource课程,您需要使用@Component@Bean@Service进行注释,例如:

@Component
public class PhotoResource extends BaseRepresentable {
   @Autowired
   CommentService commentSvc;
}

并确保此类的包已包含在@ComponentScan个包中。

此外,以下不会编译:

@Service
public class CommentService(){

你不需要paranthesis声明一个类,它应该是:

@Service
public class CommentService{