我正在使用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符合此依赖关系的autowire候选者。依赖注释:{}
我在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中的原始war依赖项时,编译错误出现了。因此,即使eclipse在服务项目中的断点处停止,该代码实际上并未运行。我不知道那是怎么回事,但确实如此。
因此,我删除了服务项目作为对客户端项目的引用,将其打包为战争并在tomcat上运行它。这解决了我的引用问题。
答案 0 :(得分: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
一些帮助。