春豆没有注射

时间:2017-05-25 07:25:22

标签: java spring postconstruct

我有以下情况,我遇到空指针异常,因为bean没有初始化并导致我的服务器无法启动失败。 在PostConstruct注释方法中有一个新引入的调用失败。同一个调用正在另一个方法中进行,该方法不在PostConstruct中,它正确执行并且不会引起任何问题。

@Component
@Lazy
@Primary
class Parent{
@Autowired
private DesignContextService designContextService;

@PostConstruct
private void init(){
      designContextService.getMethod();// fails
}

private void someFunction(){
      designContextService.getMethod();// executes successfully
}
}

}

Class DesignContextService{
@Autowired
private ContextService contextService;

public void getMethod(){
   contextService.isContextCreated();
  ...
}
// Below classes present in another jar
class ContextService{
   @Inject
    public ContextAdapter contextAdapter;

   public void isContextCreated(){
   contextAdapter.isEstablished();// contextAdapter is null . Throws exception here

} 

}

}

错误堆栈跟踪:

at 
Caused by org.springframework.beans.factory.BeanCreationException :  Error creating bean ...

at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)



at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)

1 个答案:

答案 0 :(得分:0)

这是因为@lazy注释。如文档中所述:

  

ApplicationContext实现的默认行为是在启动时急切地预先实例化所有单例bean。预实例化意味着ApplicationContext将急切地创建和配置其所有单例bean作为其初始化过程的一部分。通常这是一件好事,因为这意味着将立即发现配置或周​​围环境中的任何错误(而不是可能是几小时甚至几天)。

请查看以下链接以供参考:Using Spring @Lazy and @PostConstruct annotations

Spring: how to initialize related lazy beans after main bean creation