【问题标题】:Error creating bean with name 'baseController': Invocation of init method failed; nested exception is java.lang.NullPointerException [duplicate]创建名为“baseController”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.NullPointerException [重复]
【发布时间】:2021-10-17 02:57:52
【问题描述】:

创建名为“baseController”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.NullPointerException 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) 在 org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702) 在 org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:668) 在 org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:716) 在 org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:591) 在 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530) 在 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170) 在 javax.servlet.GenericServlet.init(GenericServlet.java:158) 在 org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1143) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1090) 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:984) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4891) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5202) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:java.lang.NullPointerException 在 DiamondShop.Service.User.HomeServiceIml.GetDataMenus(HomeServiceIml.java:33) 在 DiamondShop.Controller.User.BaseController.Initial(BaseController.java:19) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ... 30 更多


    @Controller
    public class BaseController {
        
        @Autowired
        HomeServiceIml _homeService;
        public ModelAndView _mvShare = new ModelAndView();
        
        @PostConstruct
        public ModelAndView Init () {
            _mvShare.addObject("menus", _homeService.GetDataMenus());
            return _mvShare;
        }
    }

@Controller
public class HomeController extends BaseController{

    
    @RequestMapping(value = {"/","/trang-chu"} )
    public ModelAndView Index() {
        
        ModelAndView mv= new ModelAndView("user/index");
        mv.addObject("slides", _homeService.GetDataSlide());
        mv.addObject("categorys", _homeService.GetDataCategorys());
        return mv;
    }
    
    @RequestMapping(value = "/product")
    public ModelAndView Product() {
        
        ModelAndView mv= new ModelAndView("user/product");
        return mv;
    }
}

【问题讨论】:

  • 嘿!您能否添加更多详细信息?问题是什么?什么时候发生?

标签: java spring


【解决方案1】:

使用@PostConstruct 注解的方法不应该有任何返回值! 欲了解更多信息,请查看此处:https://docs.oracle.com/javase/10/docs/api/javax/annotation/PostConstruct.html

在非拦截器类上定义的方法必须具有以下签名: 空白 () 应用 PostConstruct 的方法可以是公共的、受保护的、包私有的或私有的。 除应用程序客户端外,该方法不得是静态的。 该方法可能是最终的。 如果该方法抛出未经检查的异常,则该类不得投入使用,除非 EJB 可以处理异常甚至从异常中恢复。

一个典型的用例可以在这里找到:https://www.baeldung.com/spring-postconstruct-predestroy

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 2011-04-13
    • 2018-09-20
    • 2021-01-29
    • 2014-12-11
    • 2019-03-16
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多