java – 将DAO注入CXF服务

我正在尝试将DAO注入CXF服务.为此我使用xml配置.

在我的app-servlet.xml中,我添加了以下条目:

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

blogDao bean也在这个文件中定义.

该服务在另一个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的另一个实例.

为了解决这个问题,我将服务实现类(BlogEntriesImpl)中的dao属性声明为static.该变量在应用程序的开头设置.但我不喜欢这个解决方案.

有没有更好的方法将dao注入CXF服务?

先感谢您!

解决方法:

你说得对,实际上有两个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的bean,请考虑将其从Spring MVC上下文(app-servlet.xml)移至主上下文.

上一篇:java – 加密Crypto属性文件中的密码


下一篇:Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误