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的初始化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

    动态代理接口并注册到spring容器

    实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象

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

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

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

    主要给大家介绍了关于spring容器初始化时候遇到的死锁问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

    NULL 博文链接:https://bijian1013.iteye.com/blog/2374256

    spring ioc和aop原理流程图(详细)

    spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图

    一 基于 注解 的方式 初始化 spring 容器

    当我们不使用spring的时候 完成一个简单的 打印机任务是这样的 //MessageService类 只提供 打印内容 public class MessageService { public MessageService() { super(); System.out.println("MessageSerivce.......

    spring 中文开发手册及案例

    spring 中文开发手册,spring容器初始化等案例

    spring培训-笔记

    Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的声明式事务 22 Spring对其它企业应用支持 22 注:后面的...

    吴天雄--Spring笔记.doc

    第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块详解、Spring重要概念(容器)、Spring容器初始化的整个流程、Spring后处理器),IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性...

    Docker容器启动时初始化Mysql数据库的方法

    第二种在Spring Boot客户端连接Mysql容器时初始化数据库,你可以参考使用flyway进行数据库版本控制一文,但是这依赖客户端的能力。能不能做到Mysql容器启动时就自己初始化数据库呢?当然可以!今天就来演示一下。...

    Spring源码解析4章150页+Spring3.2.4中文注释源码

    3、源码分析-IOC容器的初始化 4、源码分析-IOC容器的依赖注入 5、源码分析-IOC容器的高级特性 三阶段 Spring AOP的涉及原理及具体实践 SpringJDBC的涉及原理及二次开发 SpringMVC框架设计原理及手写实现 四阶段 ...

    Spring教程  主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。

    作者:钱安川(Moxie) ...Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的声明式事务 22 Spring对其它企业应用支持 22

    spring mvc项目

    可用于分析spring mvc源码、spring mvc父子容器初始化流程、session和cookie机制、spring session等,也可以用于学习Java Web(servlet、filter、listener等)、spring源码等。 该项目使用servlet3.0规范,无web.xml...

    Spring.html

    --全局初始化参数--&gt; &lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;classpath:applicationContext.xml&lt;/param-value&gt; 4.在Servlet中使用WebApplicationContextUtils获取容器...

    JAVA spring 系列案例50个和学习资料

    Spring系列第12篇:lazy-init:bean延迟初始化Spring系列第13篇:使用继承简化bean配置(abstract & parent)Spring系列第14篇:lookup-method和replaced-method比较陌生,怎么玩的?Spring系列第15篇:代理详解(Java...

    spring.doc

    3.3 Spring容器内部对象的创建 12 Spring容器内部对象创建拓展: 12 3.3.1使用类构造器实例化(默认无参数) 14 3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3初始化(创建)bean时机 15 Lazy-init初始化bean的...

    深入解析Spring IoC:源码与实践指南

    这包括从AnnotationConfigApplicationContext的实例化开始,到DefaultListableBeanFactory工厂的建立,再到AnnotatedBeanDefinitionReader的初始化,这一系列过程共同构成了Spring容器的加载核心。同时,本文还探讨...

    spring3.0jar包

    你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务...

Global site tag (gtag.js) - Google Analytics