3

Resteasy と Spring を統合しようとしています。Resteasy のドキュメントとこの投稿の両方に従いました: Inject Spring beans into RestEasy。残りのクラスで @Autowire またはその他の Spring アノテーションを使用して動作させていますが、残りのクラスを春 (または DI) の依存関係から解放したままにしたいと考えています。また、Java構成のみでSpringを構成したいと思います。春の構成では、これを追加しました:

<context:component-scan base-package="package.where.spring.configuration.beans.are , package.where.rest.classes.are">
<context:include-filter type="annotation" expression="javax.ws.rs.Path"/>
</context:component-scan>

もちろん、私は web.xml に持っているので、Spring 構成は SpringContextLoaderListener によって取得されます。

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:/spring-config.xml</param-value>
</context-param>

@Autowire アノテーションを削除します。最初のパッケージ (Spring Java 構成を介してインジェクションを構成した場所) も削除すると、インジェクションは行われず、フィールドは null のままです。2 番目のパッケージを削除すると、残りのクラスの URL が resteasy によって認識されません。

Spring 構成だけでインジェクションを構成したいのですが、resteasy に外部で構成された Spring Bean からのパスを認識させる方法はありますか?

編集:Spring を正しく構成すると、@Provider アノテーション付きクラスで機能することに気付きました。

 <context:component-scan base-package="my.package1 , my.package2">
    <context:include-filter type="annotation" expression="javax.ws.rs.ext.Provider"/>
 </context:component-scan>

しかし、ミステリーは最初に思ったよりも深刻です... 私は自分が正しい道を進んでおり、一歩を踏み外しただけだと確信しています!

4

2 に答える 2

1

はるかに優れたアプローチは、JSR-330 アノテーションを使用することです。

の代わりに@Autowired、 を使用することをお勧めし@Injectます。Spring は JSR-330 アノテーションをサポートし、内部で Autowire 実装を使用します。@Component、で注釈が付けられた Spring Beanの場合@Service、注釈を JSR-330 固有の に置き換えるだけ@Namedです。

Maven を使用している場合は、pom.xmlファイルに以下を含めるだけです。

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>
于 2013-10-15T03:03:15.930 に答える
0

@Autowired の代わりに JSR-250 の @Resource を使用することは大きな前進です。@Autowired から必要なことを行います。これは JSR であり、Spring 固有ではありません。

多くの用途には十分かもしれません。

于 2013-01-29T10:09:21.070 に答える