简体   繁体   English

Spring工厂bean并非总是在使用前初始化

[英]Spring factory beans not always initialised before being used

I am using spring to initialise my beans. 我正在使用spring初始化我的bean。 I have configured a bean which I intend to use as a factory bean. 我已经配置了一个打算用作工厂Bean的Bean。

<bean id="jsServicesFactory" class="x.y.z.JSServicesFactory" />

It is a very basic class - which has 4 getter methods. 这是一个非常基本的类-它具有4个getter方法。 One example is 一个例子是

 public final PortletRegistry getPortletRegistry() {
    PortletRegistry registry = (PortletRegistry) JetspeedPortletServices
        .getSingleton().getService("PortletRegistryComponent");
    return registry;
}

I have a 2nd bean which uses this factory beans to set one of its properties 我有第二个使用此工厂bean设置其属性之一的bean

<bean id="batchManagerService" class="x.y.z.BatchManagerService">
...
<property name="portletRegistry">
   <bean factory-bean="jsServicesFactory" factory-method="getPortletRegistry" />
</property>
     ...

When I start my server in RAD, this all works perfectly. 当我在RAD中启动服务器时,这一切都可以正常工作。 However when I deploy to Linux I sometimes get the following error 但是,当我部署到Linux时, 有时会出现以下错误

ERROR org.springframework.web.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'batchManagerService' defined in ServletContext resource [/WEB-INF/context/root/batchManagerContext.xml]: Cannot create inner bean 'jsServicesFactory$created#70be70be' while setting bean property 'portletRegistry'; 错误org.springframework.web.context.ContextLoader-上下文初始化失败org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/context/root/batchManagerContext.xml]中定义的名称为'batchManagerService'的bean时出错:设置bean属性'portletRegistry'时,无法创建内部bean'jsServicesFactory $ created#70be70be'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jsServicesFactory$created#70be70be' defined in ServletContext resource [/WEB-INF/context/root/batchManagerContext.xml]: Instantiation of bean failed; 嵌套的异常是org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/context/root/batchManagerContext.xml]中定义的名称为'jsServicesFactory $ created#70be70be'的bean创建错误。 nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public final org.apache.jetspeed.components.portletregistry.PortletRegistry xyzJSServicesFactory.getPortletRegistry()] threw exception; 嵌套的异常是org.springframework.beans.factory.BeanDefinitionStoreException:工厂方法[公共最终org.apache.jetspeed.components.portletregistry.PortletRegistry xyzJSServicesFactory.getPortletRegistry()]引发了异常; nested exception is java.lang.NullPointerException 嵌套的异常是java.lang.NullPointerException

I have tried adding depends-on="jsServicesFactory" to my bean batchManagerService but it didn't work. 我试过在我的bean batchManagerService中添加depends-on =“ jsServicesFactory”,但是没有用。

Any ideas? 有任何想法吗?

Thanks 谢谢

The clue is in the stack trace, albeit buried deep in it: 线索在堆栈跟踪中,尽管埋在其中:

nested exception is java.lang.NullPointerException 嵌套的异常是java.lang.NullPointerException

Something in your code is throwing a NPE during initialization of the beans, and this is propagating up the stack, being re-wrapped in other exceptions as it goes. 您的代码中的某些内容在Bean初始化期间引发了NPE,这正在扩展堆栈,并随即在其他异常中重新包装。

Find the root cause of that NPE, and that should fix the problem. 找到该NPE的根本原因,这应该可以解决该问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM