0

複数のデータ ソースに影響するかなり複雑なプロジェクトを行っています。現在、最大 64 の Web サービス トランザクションがあり、さらに追加される予定です。サービス層が定義されており、DAO があります。通常、サービス層クラスには、データを検索するジョブを実行する 1 つ以上の DAO クラスがあります。DAO クラスは、Spring xml ワイヤリングを使用してサービス層クラスにワイヤリングされます。

すべての DAO クラスには、Interface と Impl があります。ここで重要なのは、Impl が 1 つしかないことです。impl は変更される可能性がありますが、DAO レイヤーは安定したレガシー システムに由来するため、その可能性は低いです。

実装が 1 つしかない場合、スプリング配線を使用する利点は何ですか? サービス層クラスでクラスをインスタンス化しないのはなぜですか?

4

3 に答える 3

5

理由の 1 つは単体テストです。クラスがモック自体をインスタンス化する場合、モックを使用して依存関係からクラスを分離することはできません。

インターフェースを使用する利点は、Spring が JDK 動的プロキシを使用して AOP プロキシ (宣言型トランザクション管理など) を作成できることです。それ以外の場合は、CGLIB が必要になります。Spring docs から - 選択肢がある場合はいつでも JDK 動的プロキシが優先されますhttp://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-proxying -

于 2013-08-30T12:58:21.483 に答える
1

必要ないと思う場合でも、それを使用する正当な理由はたくさんあります。この記事はそれらをうまくまとめていると思います。

http://tutorials.jenkov.com/dependency-injection/dependency-injection-benefits.html

于 2013-08-30T13:29:53.340 に答える
0

DAO には、実装クラス (データ ソース URL、接続プール パラメータなど) 以外の構成が必要になる場合があります。依存性注入の哲学では、そのような詳細は構成を構成するため、コードから除外する必要があります。サービス クラスには、厳密にビジネス ロジックを含める必要があります。

そうは言っても、次のように、コード内のメタデータを支持して XML ベースの構成記述子に対する反発がありました。

@Inject
private CustomerDAO customerDAO;

これにより、Spring が見つけた唯一の CustomerDAO 実装である限り、Spring は CustomerDAOImpl を自動的に注入します。同様に、CustomerDAOImpl クラスには、必要なすべての構成の詳細を指定する他の注釈が含まれる場合があります。

于 2013-08-30T13:02:03.743 に答える