15

私はそれが最高のデザインではなく、春の初心者からの単なる考えであることを知っています.

これで、Spring フレームワークで簡単にautowire任意のサービス メソッドを相互に便利に使用できるようになりました。しかし、サービスクラスの静的ファクトリメソッドを作成してどこでも呼び出すことの欠点は何ですか?

次のようにかなり一般的です。

@Autowired
CustomerService customerService;

....
AccountDetail ad = customerService.getAccountDetail(accountId, type);

しかし、これもうまくいくはずです:

AccountDetail ad = CustomerService.getAccountDetail(accountId, type); //if we make getAccountDetail(String, String) static

では、なぜオートワイヤーのようなデザインがあるのでしょうか? 派手で実にクールに見えますが、この背後にある作業は、別のサービス オブジェクトで 1 つのサービス Bean インスタンスを作成することです。

真剣に、春が市場にあふれている間、多くの投稿や記事がプロとリノベーションについて話しています. しかし、それはより良いパフォーマンスを保証していますか (静的ではなく autowire を使用するなど)?

4

2 に答える 2

20

多くの理由があります。

  • テスト中に簡単にモックに置き換えることはできませんCustomerService(PowerMock のようなツールは別として)

  • staticメソッドは、標準のプロキシ ベースの AOP に参加しません (トランザクション、セキュリティ、カスタムの側面はありません)。

  • HTTPリクエスト(リクエストスコープ)をシングルトンスコープサービスに注入するような凝った注入技術を使用することはできなくなりました(とにかく設計は貧弱ですが...)

しかし、完全に言えば、利点もあります。

  • staticメソッドは実際にはあなたの意図に近いです。Spring Bean がステートフルであることはめったにないため、インスタンスが機能する必要はありません。

  • static呼び出しの方が速いかもしれません (これは 99% のプログラムでは関係ありません)

于 2012-11-06T17:50:36.370 に答える
4

構成が異なる複数の CustomerService コンポーネントが必要な場合はどうすればよいでしょうか? 単一の静的メソッドでそれを行うことはできません。

また、CustomerService に何らかの構成がある場合、どのように注入しますか? 依存オブジェクトに接続される Bean を使用すると、構成が一元化され、コードを探し回る必要がなくなります。

于 2012-11-06T17:45:39.847 に答える