我正在开发包含几个子模块的应用程序。在其中一个模块上,我有这样的标题服务:
@Transactional
@Service("mySimpleService")
public class MySimpleServiceImpl implements MySimpleService {}
在另一个模块上,我有一个控制器,我想在其中使用 MySimpleService 方法之一。所以我有类似的东西:
@Controller
public class EasyController {
@Autowired
private MySimpleService mySimpleService;
@RequestMapping("/webpage.htm")
public ModelAndView webpage(@RequestParam,
@RequestParam,
HttpServletRequest request,
HttpServletResponse response) {
ModelAndView mav = new ModelAndView(”webpage”);
mav.addObject(”name”, mySimpleService.getObject());
return mav;
}
}
在mav.addObject(”name”, mySimpleService.getObject());
我得到的线上NullPointerException
。我不知道为什么。我没有收到类似于Could not autowire field
但仅NullPointerException
.
我还以这种方式创建了自己的拦截器来检查我的任务中的其他一些想法:
public class CustomInterceptor extends HandlerInterceptorAdapter {
@Autowired
private MySimpleService mySimpleService;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
request.setAttribute("attr", mySimpleService.getAttribute());
return true;
}
}
这个拦截器当然是在调度程序 servlet 中声明的。在我的日志中,我可以NullPointerException
在 line:看到request.setAttribute("attr", mySimpleService.getAttribute());
。所以这正是从另一个应用程序模块访问服务的问题。
我怎样才能做到这一点?
我听说过使用我的服务构建 EJB 并使用JNDI
或使用 Maven 共享它的想法 - 在构建应用程序期间将文件夹与我的服务复制到目标模块。我试图做第二个选项,但它不起作用,我无法检查应对是否成功。是否可以检查基于 Maven 的解决方案?您还有其他建议吗?
编辑
这是来自目标模块调度程序 servlet 的组件扫描:
<context:component-scan base-package="my.package.target.module.controller" annotation-config="false"/>