1

新しいクラスを作成して@Autowiredアノテーションを挿入し、クラスを作成してこのクラスのオブジェクトを取得し、そのメソッドを使用することの違いは何だろうと思っていました。技術的な理由(つまり、アクセスの高速化など)はありますか?

サービスケース:

 @Service
 public class AuthorService implements AuthorServiceInterface {


   //some methods
 }

単純なクラスの場合:

 public class AuthorService implements AuthorServiceInterface {


   //some methods
 }

別のクラスの最初のものを呼び出したい場合は、次のように書く必要があります。

public Class myclass{

    @Autowired
    AuthorService authorservice;


} 

2番目のケースでは、私は次のように書く必要があります。

public Class myclass{


    AuthorService authorservice = new AuthorService():

} 

これら2つのケースの違いは何ですか?

4

1 に答える 1

3

最初のスニペットは依存性注入を使用し、2番目のスニペットは使用しません。依存性注入により

  • MyClassをAuthorServiceの具体的な実装から切り離します。これにより、たとえば環境に応じて実装を切り替えることができます。
  • 毎回再インスタンス化するのではなく、シングルトン(またはセッションスコープまたはリクエストスコープ)のAuthorServiceを使用する
  • MayClassの単体テスト時にモックAuthorService実装を注入する
  • 具体的なAuthorServiceインスタンスの周囲にプロキシを挿入します。
    • 承認を確認する
    • 各メソッド呼び出しの前にトランザクションを開始し、メソッド呼び出しの後にトランザクションをコミット/ロールバックします
    • メソッド呼び出しをログに記録する
    • メソッドにかかる時間を測定し、統計を計算します
    • RMIまたはHttpInvokerを使用して、別のマシンでAuthorServiceを呼び出します
    • ..。

MyClassでは、AuthorServiceではなくAuthorServiceInterfaceを自動配線する必要があることに注意してください。

于 2012-06-22T16:10:04.370 に答える