`
huangzhir
  • 浏览: 126389 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

自定义 BeanFactory 取不到spring的配置的bean

阅读更多
2013-05-27 17:32:33 ERROR com.asiainfo.crm.service.inter.watch.WdProductSynServiceWathcherImpl:59  同步出错!程序异常!null
java.lang.NullPointerException
     at com.asiainfo.frame.web.ObjectFactory.getObject(ObjectFactory.java:37)
     at com.asiainfo.crm.core.common.SQLCommand.getSingleValue(SQLCommand.java:42)
     at com.asiainfo.crm.service.inter.watch.WdProductSynServiceWathcherImpl.getUrl(WdProductSynServiceWathcherImpl.java:35)
     at com.asiainfo.crm.service.inter.watch.WdProductSynServiceWathcherImpl.update(WdProductSynServiceWathcherImpl.java:43)
     at com.asiainfo.crm.service.inter.watch.WdProductSynServiceImpl.notifyWather(WdProductSynServiceImpl.java:48)
     at com.asiainfo.crm.service.inter.watch.WdProductSynServiceImpl.synWdProduct(WdProductSynServiceImpl.java:32)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
     at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:172)
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:203)
     at $Proxy67.synWdProduct(Unknown Source)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:275)
     at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:276)
     at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
     at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
     at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)



com.asiainfo.frame.web.ObjectFactory.getObject(ObjectFactory.java:37)  这个ObjectFactory.getObject 方法是取spring 容器里面的bean
这里是获取jdbctemplte 的,配置没问题,这个问题很奇怪,发现开发和测试环境都没问题,就现网就问题。
第二天过来时,其它的同步程序又正常了。
原来这个问题是由于ObjectFactory 还没加载完全,定时 程序已经开始执行了。

public class ObjectFactory {
    protected static WebApplicationContext wac;
    private static ObjectFactory me;

    private ObjectFactory(WebApplicationContext wac) {
        ObjectFactory. wac = wac;
    }

    public static ObjectFactory getInstance(ServletContext servletContext) {
        if (me == null) {
            me = newObjectFactory(WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext));
        }
        return me ;
    }

    public static ObjectFactory getInstance() {
        return me ;
    }

    public static Object getObject(String objname) {
        return wac .getBean(objname);
    }
}


public class AiContextLoaderListener extends ContextLoaderListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event) {
        super .contextInitialized(event);
        ServletContext servletContext = event.getServletContext();
        if (servletContext != null) {
            ObjectFactory. getInstance(servletContext);
        }
    }
}

这样在web.xml加载 AiContextLoaderListener  过滤器时,也就实例了 ObjectFactory


0
1
分享到:
评论
2 楼 hcmfys 2013-10-20  
亚信同事飘过!
1 楼 cjq_106 2013-05-28  
亚信同事飘过!

相关推荐

    Spring在应用中获得Bean的方法

    在开发中,Spring提供的各种工具如`BeanPostProcessor`、`InstantiationAwareBeanPostProcessor`等接口,允许我们自定义Bean的创建和初始化过程,进一步扩展Spring的功能。 总结来说,Spring提供多种方式让我们在...

    自定义spring控制反转(依赖注入)

    3. 加载配置:调用`BeanDefinitionReader`的`loadBeanDefinitions(Resource)`方法,将XML配置加载到Spring容器中。 4. 注册Bean定义:Spring容器会将每个bean定义注册为一个键值对,键是bean的ID,值是`Bean...

    Spring的BeanFactory的接口注解

    在Spring框架中,`BeanFactory`是工厂模式的一种实现,它负责管理容器中的Bean的生命周期与依赖注入。了解`BeanFactory`及其相关接口的功能对于掌握Spring的核心原理至关重要。 #### 二、`BeanFactory`接口的关键...

    详解如何在低版本的Spring中快速实现类似自动配置的功能

    Spring 3.x不具备条件注解,因此无法确定何时需要或不需要配置特定的Bean。同时,无法像Spring Boot那样自动加载配置。 为了解决这些问题,我们可以利用Spring提供的扩展点。其中,**BeanFactoryPostProcessor**是...

    Spring源码学习六:bean初始化1

    在预实例化过程中,Spring不仅处理普通的Bean,也特别照顾到`FactoryBean`的情况,体现了Spring对复杂场景的强大适应能力。理解这些源码细节有助于我们更好地掌握Spring的工作原理,从而更有效地进行Spring应用的...

    Spring特性——Aware感知特性

    这些接口让bean能够感知到Spring容器的存在,从而获取必要的服务或配置信息。下面我们将深入探讨Spring的Aware感知特性及其相关知识点。 1. **BeanFactoryAware** BeanFactoryAware接口提供了一个方法`...

    Spring IOC容器实现分析

    ### Spring IOC容器实现分析 ...通过以上介绍,我们可以了解到Spring IOC容器的核心组件及其工作原理。在实际开发中,理解这些概念对于高效利用Spring框架至关重要。希望本文能够为您的学习之旅带来帮助。

    【Spring】总结Spring整合Mybatis的底层原理实现步骤

    我们可以手动将Bean添加到Spring容器中,通过创建BeanDefinition对象,设置beanClass,并将其注册到Spring中。例如: ```java BeanDefinition bd = new GenericBeanDefinition(); bd.setBeanClass(User.class); ...

    Spring容器 .ppt

    - **BeanFactory**:这是Spring中最基本的容器,它负责加载配置文件,解析Bean定义,然后根据这些定义实例化Bean。可以通过`XmlBeanFactory`类使用XML配置文件初始化一个BeanFactory。 - **ApplicationContext**:...

    spring-reference

    Spring框架允许开发者自定义Bean类,并通过BeanDefinition将其配置到容器中。 ##### 3.2.4 Bean 标识符 (id 和 name) Bean的标识符用于唯一标识一个Bean。Spring框架允许使用id或name属性来为Bean指定标识符。 ###...

    Spring个人学习笔记.pdf

    文档中提到了“abstractbean”,指的是在Spring的配置文件中,一个未完整的Bean定义,它不能被实例化为一个对象,只能作为模板来派生子Bean。 10. 自定义编辑器配置器(CustomEditorConfigurer) 文档中出现了...

    spring 开发手册(pdf)

    BeanDefinition在Spring配置文件或注解中定义,是Spring容器创建Bean的基础。 三、依赖注入与Bean的配置 依赖注入是Spring框架的核心功能之一,它允许将依赖项注入到Bean中,而不是在Bean内部显式地创建和管理这些...

    第二十章 Spring 应用上下文生命周期(ApplicationContext Lifecycle)1

    这个BeanFactory是Spring管理Bean的核心容器,用于存储BeanDefinition。接着,配置BeanFactory的相关属性,如是否允许BeanDefinition重复定义,以及是否允许循环依赖。 3. **BeanFactory 准备阶段** `...

    spring ioc

    在提供的 "src" 压缩包文件中,如果包含的是 Spring 框架的源码,那么我们可以详细研究每个类和方法,了解 Spring 如何处理 Bean 的生命周期、解析配置、创建依赖关系等。这将帮助我们成为 Spring 框架的专家,更...

    spring

    Spring支持创建抽象Bean定义,这些定义可以被子Bean继承,以便共享共同的配置信息。 #### 3.6 与BeanFactory交互 - **FactoryBean**:可以请求获取FactoryBean本身,而不是其产品对象。 - **BeanPostProcessor**:...

    Spring启动后获取所有拥有特定注解的Bean实例代码

    在Bean的生命周期中,Spring提供了多种方式来获取Bean的实例,例如通过getBean方法、通过BeanFactory获取Bean实例等。 在获取所有拥有特定注解的Bean实例代码时,需要注意的是,ApplicationContextAware接口不能...

    获取Spring容器

    1. **XML配置文件**:使用XML配置文件来定义Spring容器中Bean的配置信息。 2. **注解驱动**:使用注解如`@ComponentScan`、`@Configuration`等来配置Spring容器。 3. **Java配置类**:使用纯Java的方式配置Spring...

Global site tag (gtag.js) - Google Analytics