1

我正在使用tomcat 6x,带有注释的spring 3.1,cxf 2.2x。我有一个 Web 服务项目,我们称之为我在主项目中引用的 wsproject,我们称之为 myproject。我使用 Eclipse 中的 configurebuildpath 将 wsproject 的项目引用添加到 myproject 中。我一切正常,并且能够从主项目转到 Web 服务项目中的代码。

但是,现在,当我尝试将服务(例如 myservice 从 wsproject 自动装配到控制器中)时,例如 myproject 中的 mycontroller,spring 会抛出此错误:

没有为依赖项找到类型为 [com.service.MyService] 的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{}

我在 servlet-context.xml 中有这个:

<annotation-driven />
...
<context:annotation-config/>
<context:component-scan base-package="com.myproject" />


 <beans:import resource="classpath*:/WEB-INF/spring/serviceServlet/service-context.xml"/>
<context:component-scan base-package="com.service.myService"/>  

<beans:bean id="myService" class="com.service.myServiceImpl">
    <beans:property name="myService" ref="myService" />
</beans:bean>

在 MyController 类中我有:

@Controller
public class MyController {
    @Autowired
    private MyService myService;
...

在我拥有的服务上:

 @Service
    @WebService(targetNamespace = "http://...")
    public interface MyService {

//more methods ...

但似乎 Spring 出于某种原因找不到其他项目。因此,当我启动应用程序时,我会在加载时收到此错误。任何想法这里有什么问题?

我确实将项目导入 STS,在 spring explorer 下我可以看到这个额外的服务上下文没有加载,所以这似乎是问题的根本问题。此处未正确配置某些内容。

后果:

我实际上并没有指向第二个项目中的代码,即使 eclipse 似乎正在使用它。当我在 Maven 中删除原始战争依赖项时,出现了编译错误。因此,即使 eclipse 在服务项目中的断点处停止,该代码实际上并没有运行。我不知道那是怎么回事,但确实如此。

所以,我删除了服务项目作为对客户端项目的引用,将其打包为一个战争并在 tomcat 上运行它。这解决了我的参考问题。

4

1 回答 1

2

我会做一些不同的事情。我会在两个项目中创建一个弹簧配置。给它一个不同的名字,比如service-context.xml. 然后在主配置中导入其他配置。

<annotation-driven/>
...
<import resource="classpath:service-context.xml"/>
<context:annotation-config/>
<context:component-scan base-package="com.myproject"/>

如果在构建路径配置中正确引用了您的其他项目,这应该可以工作。

无论如何,如果你想用依赖项构建项目(不仅是你的其他项目,还有 spring 依赖项),你真的想看看Maven和 m2eclipse 插件。我不会在这里给出完整的教程,因为已经有很多可用的了。pom.xml如果您阅读一些基础知识并决定使用它,我可以为您提供一些帮助。

于 2012-10-23T21:04:23.033 回答