Java 第二个自动连接的REST存储库不工作

Java 第二个自动连接的REST存储库不工作,java,spring,spring-boot,autowired,Java,Spring,Spring Boot,Autowired,我在应用程序的控制器自动连线存储库中使用,运行良好。但我也想在另一个类中使用我的回购协议。但是,当我从第二个类调用任何方法时,我会得到null指针异常,看起来自动连线在这个类中不起作用。我做错了什么?是否不可能多次自动关联同一回购协议?或者我应该实施服务,并通过服务调用我的回购协议 错误: 2017-05-15 16:27:52.193 ERROR 6624 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Serv

我在应用程序的控制器自动连线存储库中使用,运行良好。但我也想在另一个类中使用我的回购协议。但是,当我从第二个类调用任何方法时,我会得到null指针异常,看起来自动连线在这个类中不起作用。我做错了什么?是否不可能多次自动关联同一回购协议?或者我应该实施服务,并通过服务调用我的回购协议

错误

2017-05-15 16:27:52.193 ERROR 6624 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null
    at com.logic.RecommendationEngine.generatedRecommendation(RecommendationEngine.java:116) ~[classes/:na]
    at com.controllers.HomeController.showRecommendation(HomeController.java:46) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_60]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_60]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
@RestController
public class RestServiceController {

    @Autowired
    private FundRepository fundRepo;

    //Some not related methods
}
回购接口:

public interface FundRepository extends CrudRepository<Fund, Long>{}
具有相同回购协议的二级

public class RecommendationEngine {

    @Autowired
    private FundRepository fundRepo;

    //Method that invokes method from fundRepo but causes null pointer because fundRepo is null
}
Q:但是当我从第二个类调用任何方法时,我会得到空指针异常,看起来自动连接在这个类中不起作用。我做错了什么

A:这很正常,因为您的RecommendationEngine类不是SpringBean==>而不是由spring上下文处理的。因此,要使其工作,您应该将其配置为bean(使用注释或xml配置)

Q:是否不可能多次自动关联同一回购协议


A:您可以调用任意数量的Springbean。

尝试用@Service注释您的推荐引擎,这样spring容器就可以将其作为Springbean(托管对象)调用

其他一些u类可用于:

@Controller
public class HomeController {

    @Autowired
    private RecommendationEngine recommendationEngine;


    // use it

}
或者,您可以使用Project Lombok: 减少类中依赖项的样板代码

Lombok示例:

@Controller
@RequiredArgsConstructor
public class HomeController {

    private final RecommendationEngine recommendationEngine;
    private final SomeOtherDependeny dependency;


    // use it

}

不需要手动@Autowired

使用@Autowired初始化您的RecommendationEngine类对象

@Autowired
RecommendationEngine engine;
您推荐的发动机等级应如下所示:

@Component
public class RecommendationEngine {

    @Autowired
    private FundRepository fundRepo;

    //Method that invokes method from fundRepo but causes null pointer because fundRepo is null
}

您是如何初始化RecommendationEngine的对象的?@Afridi
RecommendationEngine re=new RecommendationEngine()
在HomeController的方法中。您必须自动连接RecommendationEngine的对象,而不是使用“new”运算符初始化。Ori被否决了?
@Component
public class RecommendationEngine {

    @Autowired
    private FundRepository fundRepo;

    //Method that invokes method from fundRepo but causes null pointer because fundRepo is null
}