【发布时间】:2021-08-10 15:25:39
【问题描述】:
我有一个包含多个模块的项目,我的目标是在其他模块中重用“核心”模块中定义的服务。 例如,模块“批处理”能够通过加载应用程序上下文类(通过 AnnotationConfigApplicationContext)来重用“核心”模块(声明为@Autowired)中定义的方法,该类加载和连接“核心”服务。到目前为止一切顺利。
当我想在我的“休息控制器”模块中做同样的事情时,问题就出现了。就像在 'batch' 模块中一样,'core' 服务被声明为 @Autowired,但是当控制器尝试使用它时,会显示以下异常:
java.lang.NullPointerException itix.rest.itixrestservice.RestRessourceController.getRealMethod(RestRessourceController.java:40) sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
我还没有得到的东西,我认为是失败的原因,是如何在“休息控制器”上下文中加载应用程序上下文(以及连接我的服务)。
这个“休息控制器”模块只需要暴露一些端点,视图部分被委托给另一个模块,该模块将检索并显示端点内容。控制器代码如下:
@Component @ComponentScan(basePackages = {"itix.core.service","itix.rest.itixrestservice"}) @Path("/controller") public class RestRessourceController extends AnnotationConfigApplicationContext { @Autowired MatchService matchService; @GET @Path("getReal") @Produces(MediaType.APPLICATION_JSON) public ResponseEntity<List<Match>> getReal() { List<Match> allMatches = matchService.getAllMatches(); return ResponseEntity.ok(allMatches); }
服务声明如下:
@Service @Transactional(readOnly = true) public class MatchServiceImpl implements MatchService { @Autowired MatchDao matchDao;
还有道:
@Repository public class MatchDaoImpl implements MatchDao { @Autowired private SessionFactory sessionFactory;
这是对引发错误的控制器的调用:
http://localhost:8889/itix-rest-service/rest/controller/getReal
顺便说一句,对不调用自动装配服务的不同方法的相同调用工作正常。
我找到了一些使用 spring MVC 的信息,但这不是我想要实现的。 我错过了什么?有什么我应该看的链接吗?
【问题讨论】:
-
我认为您需要在您的问题中添加一些代码(和 pom),否则很难通过查看没有任何代码上下文的堆栈跟踪来帮助您。
-
请贴一些代码。我们需要知道控制器中使用了哪些注解。你的上下文是什么样的?你是如何使用自动装配的?也许发布修改后的代码(隐藏您不想分享的任何细节)以便我们为您提供帮助。
-
我已用所需信息更新了问题。请让我知道是否需要其他任何东西?
-
您有该服务的源代码吗?它应该是“Spring compatible”吗?
-
我已经用 service 和 dao 更新了这个问题。够了吗?
标签: java spring autowired spring-restcontroller