Bean在构造函数注入期间解析为null

时间:2012-06-01 09:33:31

标签: spring resteasy

我想在春天使用reasteasy和jax-rs创建一个rest api。要做到这一点,以下行是我的应用程序上下文的一部分:

<bean id="RESTeasyProviderFactory" class="org.springframework.web.context.support.ServletContextAttributeFactoryBean">
    <property name="attributeName" value="org.jboss.resteasy.spi.ResteasyProviderFactory" />
</bean>

<bean id="RESTeasyRegistry" class="org.springframework.web.context.support.ServletContextAttributeFactoryBean">
    <property name="attributeName" value="org.jboss.resteasy.spi.Registry" />
</bean>

<bean id="RESTeasyBeanPostProcessor" class="org.jboss.resteasy.plugins.spring.SpringBeanProcessor">
    <constructor-arg>
        <bean class="org.jboss.resteasy.core.AsynchronousDispatcher">
            <constructor-arg ref="RESTeasyProviderFactory" />
        </bean>
    </constructor-arg>
    <constructor-arg ref="RESTeasyRegistry" />
    <constructor-arg ref="RESTeasyProviderFactory" />
</bean>

在组件扫描期间,当我找到第一个休息接口bean时,这会在组件扫描期间导致npe:

Caused by: java.lang.NullPointerException
       at org.jboss.resteasy.plugins.spring.SpringBeanProcessor$ResteasyBeanPostProcessor.getInjector(SpringBeanProcessor.java:133)
       at org.jboss.resteasy.plugins.spring.SpringBeanProcessor$ResteasyBeanPostProcessor.postProcessAfterInitialization(SpringBeanProcessor.java:125)
       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)
       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1461)
       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
       ... 11 more

调试器显示resteasyregistry bean和resteasyproviderfactory bean都被解析为null。

任何人都可以解释这是怎么发生的吗? 作为测试,我更改了xml,因此注册表和工厂被设置为属性,但即使在调用setter时,注册表和工厂都为null。

* EDIT2:spring debug log *

这里是spring debug log的相关部分。

2012-06-01 12:13:34,337 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'RESTeasyBeanPostProcessor'
2012-06-01 12:13:34,337 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'RESTeasyBeanPostProcessor'
2012-06-01 12:13:34,337 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.jboss.resteasy.core.AsynchronousDispatcher#e0380'
2012-06-01 12:13:34,340 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'RESTeasyProviderFactory'
2012-06-01 12:13:34,340 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'RESTeasyProviderFactory'
2012-06-01 12:13:34,340 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Eagerly caching bean 'RESTeasyProviderFactory' to allow for resolving potential circular references
2012-06-01 12:13:34,350 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'RESTeasyProviderFactory'
2012-06-01 12:13:34,386 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.jboss.resteasy.core.AsynchronousDispatcher#e0380'
2012-06-01 12:13:34,386 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'RESTeasyRegistry'
2012-06-01 12:13:34,386 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'RESTeasyRegistry'
2012-06-01 12:13:34,386 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Eagerly caching bean 'RESTeasyRegistry' to allow for resolving potential circular references
2012-06-01 12:13:34,386 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'RESTeasyRegistry'
2012-06-01 12:13:34,389 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'RESTeasyProviderFactory'
2012-06-01 12:13:34,393 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Eagerly caching bean 'RESTeasyBeanPostProcessor' to allow for resolving potential circular references
2012-06-01 12:13:34,393 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'RESTeasyBeanPostProcessor'

2 个答案:

答案 0 :(得分:1)

您是否尝试在构造函数上使用索引?

e.g

   <constructor-arg index="0"><value>7500000</value></constructor-arg>
   <constructor-arg index="1"><value>42</value></constructor-arg>

此外,您的属性似乎也引用了类:

<property name="attributeName" value="org.jboss.resteasy.spi.Registry" />

你可以发布你的课程或者告诉我们你在这里注入的确切内容吗?

答案 1 :(得分:-1)

我通过为两个bean编写自己的单例工厂来解决这个问题。它很烦人,不应该是必要的,但它确实有效。

最后我们完全改变了这部分配置,所以即使这个丑陋的解决方案也变得没必要了。