2017-01-12 10 views
1

私は、ウェブとジャージー(スプリング・ブート・ジャージー・スターター)を備えたスプリング・ブートを使用しています。リクエストスコープBeanを注入する必要があるJerseyエンドポイントがあります。しかし、アプリケーションの起動時にBeanが見つかりませんでした。スプリング・ブート・ジャージー - コントローラの起動インスタンス化を防止する

@Component 
@Path("blah")  
@RequestScoped 
public class JerseyController{ 
    @Inject 
    private MyEntity entity; 
} 

@Component 
public class JerseyConfiguration extends ResourceConfig{ 
    public JeyseyConfiguration(){ 
     register(JeyseyController.class); 
     registere(MyEntityProvider.class); 
    } 
} 

方法は、インスタンス化し、注入された依存関係は、私のジャージープロバイダが提供できるように、HTTPリクエストを受信するまで、私のJerseyControllerを注入しようとするから春を防ぐために、春・ブートのWebアプリで、ありますか?

+1

Jerseyのリソースで '@ Component'は必要ありません。これにより、Springはそれをインスタンス化します(デフォルトのSingletonスコープを使用)。私はSpringが '@ RequestScoped'を尊重しているとは思わない。これはジャージーの注釈です。あなたが '@ Component'を使いたいのであれば、私はSpringの' @Scope( "request") 'がトリックをするかもしれないと思います。 –

+0

それだけです!ありがとう。 '@ Component'属性を削除できました –

答えて

1

@Componentは、ジャージーのリソースには必要ありません。これにより、Springはそれをインスタンス化します(デフォルトのSingletonスコープを使用)。私は春が@RequestScopedを尊重しないとは思わない。これはジャージーの注釈です。 @Componentを使用したい場合、私は春@Scope("request")がトリックを行うかもしれないと思います。

@RequestScopedを削除することもできます。これはJerseyのリソースのデフォルトスコープです。

ジャージーリソースで@Componentを使用する必要があることがわかったのは、@Value(おそらくAOPでも、あまりAOPはしません)を使用する必要がある場合です。それ以外のJersey-Spring統合は、すでにDIであるSpringの最も一般的に使用されている機能をサポートしています。 Jerseyのリソースをシングルトンにしたい場合、Jerseyは@Singletonアノテーションをサポートしています。

関連する問題