0

私はリソース インジェクションの複雑さ、そして実際には Java のデータソースの専門家ではありませんが、定義済みの JNDI リソースをルックアップしてデータソースを取得するプロセスは一般的に理解しています。

別の方法としてリソース インジェクションを使用すると、次の構文が機能します。

@Resource(name="jdbc/Foo")
private javax.sql.DataSource con;

しかし、私はこれをサーブレットで使用しているので、この注入された接続オブジェクトの値がどのくらい存在するのでしょうか? おそらく、サーブレット内の単なるオブジェクトであるため、サーブレットが最初にインスタンス化されたときに注入され、サーブレットと同じ期間存在します(手動で変更しないと仮定します)。これは正しいです?それとも、サーブレットが使用されるたびに、サーブレットはリソースを再注入しますか?

ありがとう

4

3 に答える 3

1

通常、コンテナ管理のリソースは@Resourcesアノテーションを使用して注入されます。また、コンテナが管理するリソースは、コンテナが実行されている限り存続します (手動で強制終了しないか、例外が発生しない限り)。同じアプリケーション サーバー エコシステム (同じアプリケーション サーバー、クラスター、またはサーバー ドメイン) 内に存在する場合、複数のアプリケーションが同じリソース オブジェクトを使用できます。ただし、サーブレットはアプリケーションによって管理され、アプリケーションが実行されている限り、アプリケーションのスコープ内に存在します。したがって、寿命に関しては、リソースを比較すると、サーブレットよりも寿命が長くなります。

そうです、サーブレットにリソースを注入すると、リソースの参照はサーブレットの作成からサーブレットのライフサイクルの終わりまで残ります。インジェクションは、サーブレットまたはリソースの使用方法とは関係ありません。

うまくいけば、これであなたの質問に答えることができます。ありがとう!

于 2013-05-23T15:13:24.400 に答える
1

サーブレット コンテナは、サーブレットのインスタンスを 1 つだけ作成します。次に、使用している IoC コンテナーがインスタンス化して を注入するDataSourceため、 の値はconサーブレットの存続期間中同じままです。アプリケーションの寿命。

DataSource が作成しようとしている基礎となる接続に関しては、それはデータソース次第です。

于 2013-05-23T15:09:47.677 に答える