私はtomcat6x、注釈付きのSpring 3.1、cxf2.2xを使用しています。Webサービスプロジェクトがあります。メインプロジェクトで参照したwsprojectと呼び、myprojectと呼びましょう。Eclipseのconfigurebuildpathを使用して、wsprojectのプロジェクト参照をmyprojectに追加しました。すべてが機能していて、メインプロジェクトからWebサービスプロジェクトのコードに移動できます。
ただし、wsprojectからコントローラー(myprojectのmycontrollerなど)にmyserviceなどのサービスを自動配線しようとすると、springは次のエラーをスローします。
タイプ[com.service.MyService]の一致するBeanが依存関係に見つかりません:この依存関係のautowire候補として適格な少なくとも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がそれを使用しているように見えたとしても、私は実際には2番目のプロジェクトのコードを指していませんでした。Mavenで元の戦争依存関係を削除すると、コンパイルエラーが表示されました。そのため、サービスプロジェクトのブレークポイントで日食が停止していても、そのコードは実際には実行されていませんでした。それがどうなるかはわかりませんが、そうでした。
そこで、クライアントプロジェクトへの参照としてサービスプロジェクトを削除し、戦争としてパッケージ化して、Tomcatで実行しました。それは私の参照の問題を解決しました。