0 0

怎样判断Spring容器初始化完成?!20

一个普通类实现了BeanFactoryPostProcessor,在里面调用了一个bean,结果bean中的还需要Spring注入一个类,结果空指针,单测没有问题。类摘要如下:

public class A implements BeanFactoryPostProcessor{
   
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException{

        ……很多操作省略

        ((B)factory.getBean("B")).xxx();
    }
}

@Component
public class B{
   
    @Autowired
    @Qualifier("C")
    private C c;

    public void xxx(){
        // 单元测试中注掉A类中最后那句跑OK,但是启动服务就不行,包空指针
        c.yyy();

    }

}

上述问题,初步估计是Spring容器没有初始化完成。逻辑实现的目的是想在Spring加载完成后执行某些方法。
2013年5月15日 14:17

4个答案 按时间排序 按投票排序

1 0

看你代码想要表达的是,想要spring在构造bean后执行某个方法

推荐使用@PostConstruct即可:

@Component 
public class B{ 
    
    @Autowired 
    @Qualifier("C") 
    private C c; 
    @PostConstruct
    public void xxx(){ 
        // 单元测试中注掉A类中最后那句跑OK,但是启动服务就不行,包空指针 
        c.yyy(); 

    } 

} 


如果非要自己玩,那就用ApplicationListener
public class A implements ApplicationListener<ContextRefreshedEvent> {

  public void onApplicationEvent(ContextRefreshedEvent event) {
        event.getApplicationContext().getBean("B", B.class).xxx();
  }


}

2013年5月15日 21:49
0 0

简单点的弄个定时器,启动后几秒再运行,多方便啊。

2013年5月17日 09:50
0 0

你的意思是A用到了B,但是初始化A的时候,B还没有初始化完成,造成空指针异常。如果是这样,可以利用depends-on关键字,指定要想实例化A,则首先实例化B.

2013年5月15日 16:24
0 0

直接使用classpathxmlApplicationContext

2013年5月15日 16:19

相关推荐

    浅谈spring容器中bean的初始化

    在Spring框架中,Bean的初始化是一个关键的概念,它涉及到Bean的生命周期管理以及Spring容器如何创建、配置和管理这些Bean。本文将深入探讨Spring容器中Bean的初始化过程。 首先,Spring容器根据XML配置文件(如`...

    Spring的IoC容器初始化源码解析

    Spring的IoC容器初始化源码解析,包括资源定位、加载、注册3个过程

    spring的初始化

    这种方式提高了代码的可重用性和可测试性,因为初始化逻辑可以独立于Spring容器进行。 总的来说,Spring的初始化机制为开发者提供了灵活的控制,可以在对象生命周期的关键时刻执行自定义代码。`InitializingBean`...

    Spring Bean创建初始化流程.docx

    在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    本文将深入探讨如何在Spring容器初始化Bean和销毁Bean前后执行自定义的操作,以便于进行日志记录、资源清理等任务。 首先,我们需要了解Spring中Bean的生命周期。Bean的生命周期大致分为以下阶段: 1. 实例化:...

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    当Spring容器创建并初始化Bean时,会寻找带有@PostConstruct注解的方法并执行。 2. **InitializingBean接口** 如果一个Bean实现了Spring的InitializingBean接口,那么它必须重写`afterPropertiesSet()`方法。此...

    Spring简单模拟Spring容器

    标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...

    SpringBoot项目启动时实现调用一次初始化方法.docx

    `@PostConstruct`是Java EE规范的一部分,它用于标记一个方法,这个方法将在对象被Spring容器初始化完成后、所有依赖注入完成并且在该对象的`init()`方法之前调用。使用`@PostConstruct`注解的方法只会被调用一次,...

    简单Spring容器实现

    本主题将深入探讨“简单Spring容器实现”,基于提供的标签“源码”和“工具”,我们将聚焦于Spring容器的原理及其简易实现。下面,我们先来理解Spring容器的核心概念,然后逐步探索其内部机制,并通过一个名为...

    Spring容器的通俗理解及简单写法

    4. **管理生命周期**: Spring容器能够管理Bean的生命周期,包括初始化、销毁等。在简单的实现中,可以添加方法来模拟这些生命周期回调。 5. **依赖注入**: 最后,通过反射调用setter方法或构造函数,将依赖注入到...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...

    深度解析spring容器管理bean

    Spring容器还提供了多种管理Bean生命周期的方法,包括初始化回调、销毁回调、以及作用域(singleton、prototype等)。初始化回调是指在Bean实例化后、开始使用前执行的方法,可以通过`init-method`属性指定。销毁回...

    获取spring容器的方法

    ### 获取Spring容器的方法详解 在Java开发中,Spring框架因其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)功能而被广泛使用。掌握如何获取Spring容器对于管理和...

    spring容器初始化遇到的死锁问题解决

    在 Spring 框架中,容器初始化过程中可能会遇到死锁问题,这个问题的出现会导致 Spring 容器卡在那里,不能完成所有 bean 的初始化。今天,我们来讨论这个问题的解决方法。 死锁问题的出现是由于在 Spring 容器初始...

    Spring容器 .ppt

    Spring容器是Spring框架的核心组成部分,它负责管理对象的生命周期和对象之间的依赖关系。Spring容器的主要职责是读取配置元数据,创建和组装Bean,并提供Bean的完整生命周期管理。本篇内容将深入探讨Spring容器的...

    Spring 容器后处理器

    在Spring框架中,容器后处理器(BeanFactoryPostProcessor)是一种非常实用的设计模式,主要用于在容器初始化完成后对容器进行额外的定制操作。这种设计模式不仅提高了系统的灵活性,还增强了系统的可配置性。 ####...

    spring容器简单实例

    3. **加载配置并初始化容器** 使用`ClassPathXmlApplicationContext`类加载配置文件,创建ApplicationContext容器: ```java ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); ...

    spring容器学习笔记

    初始化和销毁方法在 Spring 容器中,我们可以通过配置来指定 Bean 在被创建后或销毁前需要执行的方法。这些方法可以用于执行初始化设置或者清理工作。 3.1. 初始化方法当我们想要在 Bean 创建完成后执行特定的初始...

    Spring容器初始化及问题解决方案

    主要介绍了Spring容器初始化及问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics