【问题标题】:Null Pointer exception while initialize@ PostConstruct method [duplicate]初始化@ PostConstruct方法时出现空指针异常[重复]
【发布时间】:2019-10-27 16:32:55
【问题描述】:

我在初始化 @PostConstruct 方法时遇到 NullPointerException

我的启动类代码:

@Component
public class Startup {

    @Autowired
    private UserService userService;

    @Autowired
    private BCryptPasswordEncoder passwordEncoder;

    @PostConstruct
    private void createAdmin() {
        try {
            User user = userService.findByUsername("admin123");
            if (user == null) {
                user.setFirstName("administrator");
                user.setLastName("administrator");
                user.setGender("Male");
                user.setDob(Date.valueOf("2019-06-13"));
                user.setEmail("administrator@gmail.com");
                user.setAddress("administrator address");
                user.setUsername("admin123");
                user.setPassword(passwordEncoder.encode("admin123"));
                user.setPhoneNumber("123456789");
                user.setIsActive(Status.getActiveUser());
                user.setRole(Role.getRoleAdmin());
                userService.saveUser(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

我将 @serviceUserService 更改为 UserRepository 而不是 @Component,这一次我得到不同的异常说:

无法获取当前线程异常的事务同步会话。

我哪里弄错了?

这里是异常日志:

java.lang.NullPointerException
at com.mhs.goodsexchangehinge.init.Startup.createAdmin(Startup.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4745)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:596)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1805)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)

【问题讨论】:

  • 你不是说user != null 而不是user == null吗?

标签: java spring-mvc nullpointerexception postconstruct


【解决方案1】:

尝试将(user == null) 更改为(user != null)

【讨论】:

  • 它使我免于出现空指针异常,但未保存用户详细信息。
  • @Mohammadhussain 那么你应该先创建一个用户对象,然后再尝试调用它的设置器。
  • 感谢@MarkRotteveel,但它应该在尝试之后而不是之前。犯了一个愚蠢的错误。
  • 我错过了这个:@PostConstruct private void createAdmin() { ** try {** User u = userService. findByUsername("admin123"); if (u == null) { User user =new User();}'
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多