2012-03-14 18 views
0

私は用語を間違って使用してください許してくださいが、私はJava Web開発と春に新しいです。 私が間違っていると私の前提を訂正してください。2つ以上のサーブレットでSpring DIを使用するには?

Vaadin for UIとSpring MVCをRESTful Web-Servicesに使用するWebAppを作成したいと思います。 だから、私は2つのサーブレットが必要だと思います。 Vaadinを提供するためのものとSpring MVCを提供するもの。

私は両方のサーブレットで使用されているいくつかの一般的なDaoBeanを持っていますので、@Autowiredアノテーションを使ってSpringを使用して、@Repositoryと@Componentタグ付きBeanをMVCとVaadin - "(App | Servlet)" (springsコンポーネントスキャン機能で発見)

しかし、私はそれを働かせることはできません。 Spring-MVC-App - 動作します。私はすべての@Controllersに注釈を付けていて、すべて自動的に@Autowiredです。

しかしVaadinで、私は常に取得する:

SCHWERWIEGEND: Servlet.service() for servlet [hello] in context with path [/pliste] threw exception [javax.servlet.ServletException: failed to acquire new instance of class net.d21.pliste.HelloWorld] with root cause 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [net.d21.pliste.HelloWorld] is defined: expected single bean but found 0: 

は私が私の基本的な質問は、2つの異なるサーブレットに一般的な依存関係を注入する方法、であると思いますか? (私の場合はVaadinとMVCですが、置き換え可能だと思います)。

答えて

1

典型的な春Webアプリケーションは、アプリケーション・コンテキストの2レベルの階層を有する:

    ContextLoaderListener によってロード
  • ルートアプリケーションコンテキスト、そのデフォルトの設定ファイルは、applicationContext.xmlあります。このコンテキストには、すべてのサーブレット、フィルタなどで使用できる共通Beanが含まれています。

  • サーブレット固有のアプリケーションコンテキスト。デフォルトの設定場所は${serlvet-name}-servlet.xmlです。これらのコンテキストには、特定のサーブレット固有のBeanが含まれています。

だから、あなたのケースでは、あなたは、サーブレット固有のコンテキストでapplicationContext.xmlに共通の豆と(例えば、Spring MVCのためのコントローラ)サーブレット特有の豆を宣言する必要があります。

<component-scan>を使用する場合は、別の基本パッケージを使用するか、filtering them by annotationsによって異なるコンテキストでBeanの重複を避ける必要があることに注意してください。

+0

あなたのコメント、あなたのリンクはespacialyが私を助けてくれました。ありがとう! – crushervx

関連する問題