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