在下面提到的代碼中,我創建了這個,因爲我得到java.lang.NullPointerException,看到我的錯誤日誌下。當我實施這個時,它已經修復並且完美運行。然而,這裏有一位成員告訴我 -SpringMvc實例化Bean - Singleton
「您正在爲每次調用getOfficerRegistrationValidation創建新的bean,這包括重新創建數據庫對象,這些對象每個都很昂貴,並且如果某些對象應該是你應該找到一種方法讓軍官註冊認證可重複使用和線程安全,這樣你就可以只擁有一個,並且只使用IoC注入到任何你想要的地方「
我認爲他是對的可以有人告訴我最好的方式做到這一點,而不必再次實例化所有的bean。我只想實例化只有特定的bean,而不會遇到這個問題。
public final class BeanFactory() {
private static ClassPathXmlApplicationContext context;
private static ClassPathXmlApplicationContext getContext() {
if (context== null) {
context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
return context;
}
public static OfficerRegistrationValidation getOfficerRegistrationValidation() {
return (OfficerRegistrationValidation) getContext().getBean("officerRegistrationValidation");
}
}
在控制器作出這樣一個電話:`BeanFactory.getOfficerRegistrationValidation()驗證(....)
錯誤日誌:
java.lang.NullPointerException
at com.crimetrack.service.OfficerRegistrationValidation.validate(OfficerRegistrationValidation.java:51)
at org.springframework.validation.DataBinder.validate(DataBinder.java:725)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:815)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:367)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
我已經使用JSR330'@ Inject'註解,Spring可以使用這個或更常見的'@ Autowired'註解來做同樣的事情。你的選擇。 – nickdos
我使用的是基於xml的配置,因爲我沒有完全理解註釋,所以現在我使用的註釋類似混合配置。使用xml配置有助於我理解整個項目的佈線。我仍然沒有得到Autowired註解這就是爲什麼我使用混合動力我主要使用Controller,RequestMapping等。你能給我一些建議嗎? – devdar
這是我在此論壇上的上一個問題,涉及到我詢問的相同問題,它包含所有代碼和解釋http://stackoverflow.com/questions/12558476/springmvc-java-lang-nullpointerexception-when-posting- form-to-server/12589627#comment16968815_12589627 – devdar