![](/img/trans.png)
[英]NullPointerException using Spring to @autowire mybatis mapper
[英]NullPointerException on java Mapper with MyBatis
我收到了NullPointerException
,我不知道我的錯誤在哪里。
錯誤在selectByExample
函數中。 代碼是:
package com.service.test;
@Service
public class TestService {
[...]
@Autowired
private TestMapper TestMapper;
[...]
public List<Short> test(){
List<Short> lista = new ArrayList<Short>();
testExample me = new testExample();
me.or().andTestEqualTo(1);
List<test> listTest = TestMapper.selectByExample(me); //line 81
for(int i=0; i<listTest.size(); i++){
lista.add(listTest.get(i).getNuovoDb());
}
return lista;
}
Controller.java
TestService ms = new TestService();
List<Short> listTest = ms.sediMigrate(); //line 46
applicationContext是以下內容:
<!-- enable autowire -->
<context:annotation-config />
<context:component-scan base-package="com.service.test"/>
[...]
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.**"/>
<property name="sqlSessionFactoryBeanName" value="exSqlSessionFactory"/>
</bean>
這里有錯誤:
[11/07/14 11.19.33:848 CEST] 0000004f servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper服務SRVE0068E:servozio del servlet調度程序nell'applicazione TestEAR中的Generata eccezione non rilevata。 Creata eccezione:org.springframework.web.util.NestedServletException:請求處理失敗; 嵌套的異常是org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)處的java.lang.NullPointerException org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)處的javax.servlet的org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)的.http.HttpServlet.service(HttpServlet.java:738)的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)的。 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)上的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)。 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)處的servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) com.ibm.ws.webcontainer.webapp.WebGroup.handle中的java:3935)com.ibm.ws.webcontainer.WebContainer.handle中的Request(WebGroup.java:276) com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)處的com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)處的Request(WebContainer.java:931) com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)上的.ibm.ws.http.channel.inbound.impl.HttpInboundLink.java:452 com上的.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) .ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)位於com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)位於com.ibm.io.async.AsyncChannelFuture com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)處com.ibm.io.async.ResultHandler.complete(ResultHandler.java:2)的.fireCompletionActions(AsyncChannelFuture.java:161) 04)在com.ibm.ws.util上的com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)在com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)處。 ThreadPool $ Worker.run(ThreadPool.java:1613)由以下原因引起:com.test.controller.ReturnPage(controller.java:com.service.test.TestService.test(TestService.java:81)處的java.lang.NullPointerException 46)at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)at java.lang.reflect處sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod處的.Method.invoke(Method.java:600)在org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) (AnnotationMethodHandlerAdapter.java:446)在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.han org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)的dle(AnnotationMethodHandlerAdapter.java:434)org.springframework的org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)的dle(AnnotationMethodHandlerAdapter.java:434) .web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)...還有25個
[11/07/14 11.19.33:856 CEST] 0000004f FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider log事件FFDC1003I:C:\\ Program Files \\ IBM \\ WebSphere \\ AppServer \\ profiles \\ AppSrv01 \\中的Emesso甚至到FFDC logs \\ ffdc \\ server1_5e0b5e0b_14.07.11_11.19.33.8537970037945028520520.txt com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest()309 [11/07/14 11.19.33:857 CEST] 0000004f webapp E com.ibm。 ws.webcontainer.webapp.WebApp logServletError SRVE0293E:[錯誤servlet]-[調度程序]:com.test.controller.ReturnPage(com.service.test.TestService.test(TestService.java:81)處的java.lang.NullPointerException controller.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(Handler上的.lang.reflect.Method.invoke(Method.java:600) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)處的MethodInvoker.java:175)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java: 434)在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)在org.springframework.web.servlet.FrameworkServlet org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)的java.servlet.http.HttpServlet.service(HttpServlet.java:738)的.processRequest(FrameworkServlet.java:961)。位於com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java)上的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)上的web.servlet.FrameworkServlet.service(FrameworkServlet.java:837): 1657),網址為com.ibm.ws.webcontainer.servlet.ServletW com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)的com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:的rapper.handleRequest(ServletWrapper.java:939): 181)位於com.ibm.ws.webcontainer.webapp.Webapp.WebApp.handleRequest(WebApp.java:3935)位於com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)位於com.ibm.ws com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)上的.webcontainer.WebContainer.handleRequest(WebContainer.java:931)在com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java :186),位於com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452),位於com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java :511)在com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)在com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCa com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)上com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)上的llback.java:83) .ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)位於com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)位於com.ibm.io.async.ResultHandler.complete(ResultHandler .java:204)com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)com.ibm.ws .util.ThreadPool $ Worker.run(ThreadPool.java:1613)
使用Spring時,應避免顯式創建bean(使用new
運算符)-框架應為您完成。 並且bean實例應該已經在Spring上下文中。 如果用new
實例化服務Bean,則不會自動裝配任何東西。 這就是為什么您將使用null
而不是您的mapper實例的原因。
請查看有關Spring應用程序中的依賴項注入和bean生命周期的Spring文檔http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-factory-collaborators
更新:
將TestService
自動TestService
到控制器中可能會解決您的問題。
@Controller
public class Controller {
@Autowired private TestService testService;
...
@RequestMapping
public String returnPage() {
...
testService.sediMigrate();
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.