2012-07-07 80 views
4

我正在嘗試將DAO注入CXF服務。爲此,我使用xml配置。將DAO注入CXF服務

在我的應用程序-servlet.xml中我已經添加下面的條目:

<bean id="blogService" class="blog.BlogEntriesImpl"> 
     <property name="blogDao" ref="blogDao" /> 
    </bean> 

blogDao豆也在此文件中定義。

該服務被配置在另一個XML文件:

<import resource="classpath:META-INF/cxf/cxf.xml" /> 

    <jaxws:endpoint id="blogService" implementor="blog.BlogEntriesImpl" 
    address="/Blog1" /> 

BlogEntriesImpl實現服務接口。它有一個dao屬性和一個setter方法。

我調試了應用程序,發現BlogEntriesImpl的一個實例在啓動時被實例化並且具有dao屬性。我會說這是通過app-servlet.xml中的bean配置完成的。

但是,當我調用服務時,拋出了NullPointerException。這是使用的另一個BlogEntriesImpl實例。

爲了解決此問題,我將service實現類(BlogEntriesImpl)中的dao屬性聲明爲靜態。該變量在應用程序的開始處設置。但我不喜歡這個解決方案。

有沒有更好的方法將注入到CXF服務?

預先感謝您!

回答

4

您說得對,您的BlogEntriesImpl類實際上有兩個實例,一個由Spring創建,另一個由Apache CXF創建。您必須明確要求Apache CXF使用Spring bean,而不是提供類。退房Writing a service with Spring,看起來你必須更換:

<jaxws:endpoint id="blogService" implementor="blog.BlogEntriesImpl" address="/Blog1" /> 

有:

<jaxws:endpoint id="blogService" implementor="#blogService" address="/Blog1" /> 

如果Apache CXF無法找到名稱blogService豆,考慮從Spring MVC的情況下移動到主上下文( app-servlet.xml)。