我正在使用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 上运行它。这解决了我的参考问题。