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
分享到:
相关推荐
在开发中,Spring提供的各种工具如`BeanPostProcessor`、`InstantiationAwareBeanPostProcessor`等接口,允许我们自定义Bean的创建和初始化过程,进一步扩展Spring的功能。 总结来说,Spring提供多种方式让我们在...
3. 加载配置:调用`BeanDefinitionReader`的`loadBeanDefinitions(Resource)`方法,将XML配置加载到Spring容器中。 4. 注册Bean定义:Spring容器会将每个bean定义注册为一个键值对,键是bean的ID,值是`Bean...
在Spring框架中,`BeanFactory`是工厂模式的一种实现,它负责管理容器中的Bean的生命周期与依赖注入。了解`BeanFactory`及其相关接口的功能对于掌握Spring的核心原理至关重要。 #### 二、`BeanFactory`接口的关键...
Spring 3.x不具备条件注解,因此无法确定何时需要或不需要配置特定的Bean。同时,无法像Spring Boot那样自动加载配置。 为了解决这些问题,我们可以利用Spring提供的扩展点。其中,**BeanFactoryPostProcessor**是...
在预实例化过程中,Spring不仅处理普通的Bean,也特别照顾到`FactoryBean`的情况,体现了Spring对复杂场景的强大适应能力。理解这些源码细节有助于我们更好地掌握Spring的工作原理,从而更有效地进行Spring应用的...
这些接口让bean能够感知到Spring容器的存在,从而获取必要的服务或配置信息。下面我们将深入探讨Spring的Aware感知特性及其相关知识点。 1. **BeanFactoryAware** BeanFactoryAware接口提供了一个方法`...
### Spring IOC容器实现分析 ...通过以上介绍,我们可以了解到Spring IOC容器的核心组件及其工作原理。在实际开发中,理解这些概念对于高效利用Spring框架至关重要。希望本文能够为您的学习之旅带来帮助。
我们可以手动将Bean添加到Spring容器中,通过创建BeanDefinition对象,设置beanClass,并将其注册到Spring中。例如: ```java BeanDefinition bd = new GenericBeanDefinition(); bd.setBeanClass(User.class); ...
- **BeanFactory**:这是Spring中最基本的容器,它负责加载配置文件,解析Bean定义,然后根据这些定义实例化Bean。可以通过`XmlBeanFactory`类使用XML配置文件初始化一个BeanFactory。 - **ApplicationContext**:...
Spring框架允许开发者自定义Bean类,并通过BeanDefinition将其配置到容器中。 ##### 3.2.4 Bean 标识符 (id 和 name) Bean的标识符用于唯一标识一个Bean。Spring框架允许使用id或name属性来为Bean指定标识符。 ###...
文档中提到了“abstractbean”,指的是在Spring的配置文件中,一个未完整的Bean定义,它不能被实例化为一个对象,只能作为模板来派生子Bean。 10. 自定义编辑器配置器(CustomEditorConfigurer) 文档中出现了...
BeanDefinition在Spring配置文件或注解中定义,是Spring容器创建Bean的基础。 三、依赖注入与Bean的配置 依赖注入是Spring框架的核心功能之一,它允许将依赖项注入到Bean中,而不是在Bean内部显式地创建和管理这些...
这个BeanFactory是Spring管理Bean的核心容器,用于存储BeanDefinition。接着,配置BeanFactory的相关属性,如是否允许BeanDefinition重复定义,以及是否允许循环依赖。 3. **BeanFactory 准备阶段** `...
在提供的 "src" 压缩包文件中,如果包含的是 Spring 框架的源码,那么我们可以详细研究每个类和方法,了解 Spring 如何处理 Bean 的生命周期、解析配置、创建依赖关系等。这将帮助我们成为 Spring 框架的专家,更...
Spring支持创建抽象Bean定义,这些定义可以被子Bean继承,以便共享共同的配置信息。 #### 3.6 与BeanFactory交互 - **FactoryBean**:可以请求获取FactoryBean本身,而不是其产品对象。 - **BeanPostProcessor**:...
在Bean的生命周期中,Spring提供了多种方式来获取Bean的实例,例如通过getBean方法、通过BeanFactory获取Bean实例等。 在获取所有拥有特定注解的Bean实例代码时,需要注意的是,ApplicationContextAware接口不能...
1. **XML配置文件**:使用XML配置文件来定义Spring容器中Bean的配置信息。 2. **注解驱动**:使用注解如`@ComponentScan`、`@Configuration`等来配置Spring容器。 3. **Java配置类**:使用纯Java的方式配置Spring...