-
怎样判断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个答案 按时间排序 按投票排序
-
看你代码想要表达的是,想要spring在构造bean后执行某个方法
推荐使用@PostConstruct即可:@Component public class B{ @Autowired @Qualifier("C") private C c; @PostConstruct public void xxx(){ // 单元测试中注掉A类中最后那句跑OK,但是启动服务就不行,包空指针 c.yyy(); } }
如果非要自己玩,那就用ApplicationListenerpublic class A implements ApplicationListener<ContextRefreshedEvent> { public void onApplicationEvent(ContextRefreshedEvent event) { event.getApplicationContext().getBean("B", B.class).xxx(); } }
2013年5月15日 21:49
-
你的意思是A用到了B,但是初始化A的时候,B还没有初始化完成,造成空指针异常。如果是这样,可以利用depends-on关键字,指定要想实例化A,则首先实例化B.
2013年5月15日 16:24
相关推荐
在Spring框架中,Bean的初始化是一个关键的概念,它涉及到Bean的生命周期管理以及Spring容器如何创建、配置和管理这些Bean。本文将深入探讨Spring容器中Bean的初始化过程。 首先,Spring容器根据XML配置文件(如`...
### Spring的IoC容器初始化源码解析 #### 一、Spring框架的核心——IoC容器 Spring框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented ...
在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...
Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...
本文将深入探讨如何在Spring容器初始化Bean和销毁Bean前后执行自定义的操作,以便于进行日志记录、资源清理等任务。 首先,我们需要了解Spring中Bean的生命周期。Bean的生命周期大致分为以下阶段: 1. 实例化:...
当Spring容器创建并初始化Bean时,会寻找带有@PostConstruct注解的方法并执行。 2. **InitializingBean接口** 如果一个Bean实现了Spring的InitializingBean接口,那么它必须重写`afterPropertiesSet()`方法。此...
标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...
`@PostConstruct`是Java EE规范的一部分,它用于标记一个方法,这个方法将在对象被Spring容器初始化完成后、所有依赖注入完成并且在该对象的`init()`方法之前调用。使用`@PostConstruct`注解的方法只会被调用一次,...
Java项目开发用的公用基础模块,包括:Spring容器初始化、配置文件读取工具类、分页对象、Protobuf工具类、反射工具类等
本主题将深入探讨“简单Spring容器实现”,基于提供的标签“源码”和“工具”,我们将聚焦于Spring容器的原理及其简易实现。下面,我们先来理解Spring容器的核心概念,然后逐步探索其内部机制,并通过一个名为...
4. **管理生命周期**: Spring容器能够管理Bean的生命周期,包括初始化、销毁等。在简单的实现中,可以添加方法来模拟这些生命周期回调。 5. **依赖注入**: 最后,通过反射调用setter方法或构造函数,将依赖注入到...
然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...
Spring容器还提供了多种管理Bean生命周期的方法,包括初始化回调、销毁回调、以及作用域(singleton、prototype等)。初始化回调是指在Bean实例化后、开始使用前执行的方法,可以通过`init-method`属性指定。销毁回...
### 获取Spring容器的方法详解 在Java开发中,Spring框架因其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)功能而被广泛使用。掌握如何获取Spring容器对于管理和...
#### 二、Spring容器的初始化与获取 在实际开发中,我们通常会使用`ApplicationContext`接口来获取Spring容器。可以通过多种方式来初始化`ApplicationContext`,其中最常见的有以下几种: 1. **XML配置文件**:...
在 Spring 框架中,容器初始化过程中可能会遇到死锁问题,这个问题的出现会导致 Spring 容器卡在那里,不能完成所有 bean 的初始化。今天,我们来讨论这个问题的解决方法。 死锁问题的出现是由于在 Spring 容器初始...
Spring容器是Spring框架的核心组成部分,它负责管理对象的生命周期和对象之间的依赖关系。Spring容器的主要职责是读取配置元数据,创建和组装Bean,并提供Bean的完整生命周期管理。本篇内容将深入探讨Spring容器的...
在Spring框架中,容器后处理器(BeanFactoryPostProcessor)是一种非常实用的设计模式,主要用于在容器初始化完成后对容器进行额外的定制操作。这种设计模式不仅提高了系统的灵活性,还增强了系统的可配置性。 ####...
3. **加载配置并初始化容器** 使用`ClassPathXmlApplicationContext`类加载配置文件,创建ApplicationContext容器: ```java ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); ...