この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 12335|答える: 0

[JavaEE] 春@Beanと@Service注釈の違い

[リンクをコピー]
掲載地 2018/08/30 13:29:41 | | |
今日は同僚と、Spring Bootで@Configurationと@Beanの組み合わせで豆を作るか、クラス上で@Serviceやその他の注釈を直接使うかについて話し合いました。 著者は最初の言葉、すなわち@Configurationと@Beanの組み合わせを用いる傾向があります。

まず例を見てみましょう。目標はSearchService用のビーンを作成することです。

@Serviceを直接使いましょう:




アプリケーション起動、ブラウザアクセス:http://localhost:8081/search?q=koly、ページ表示:["hello", "koly"]

@Configurationと@Beanの使い方:






@Serviceコードを直接使うのと比べて、ElasticSearchServiceImplの上に付けられた@Service注釈を取り除くAppConfigクラスがあります。 一見すると、コードやクラスが増えています。 では、後者を使う利点は何でしょうか?

著者は、その利点を以下のように考えています:

関心事の分離

@Configurationおよび@Beanの手法を用いることで、豆の作成はすべて一箇所で行われ、インターフェースやその実装は豆の生成とは無関係です。

ビーンの作成を変更する場合は、対応するConfigurationクラスを表示・修正するだけで済み、対応するJavaビーンに変更する必要はありません。 例えば、ビーン作成は @Scope や @Profile と協力し、構成クラスを修正するだけでよい場合もあります。

単独任務

@service注釈自体は2つの役割を担います。

一つは豆の創造です。
2つ目は、クラスをサービスとして識別することです。
注釈付きクラスが「サービス」であることを示し、元々ドメイン駆動(Domain-Driven)によって定義されています

設計(Evans, 2003)は「モデル内に単独で存在し、カプセル状態を持たないインターフェースとして提供される操作」として表現されています。

上記はスプリングによる@Service注釈の説明です。 そのis@Serviceは実際にはDDDにおける状態のない独立したインターフェース操作を表しています。

@Beanおよび@Configuration協力の形で、ビーンの作成は別のクラスに引き継がれ、Javaではサービスのアイデンティティはインターフェースとクラス名に引き継がれます。 これはSpring Dataにも反映されており、RepositoryはCrudRepositoryのように名前で識別されます。 したがって、サービスは名称にも反映されています。 特定の階層定義を用いて、Springが提供する注釈(例えばMapperレイヤーやValidatorレイヤーなど)に頼らず、プロジェクト名に応じてより多くのレイヤーを提供できます。

さらに、豆とサービスは二次元的な概念です。 一つは具体的な実装について、もう一つはDDDの概念についてです。

より柔軟になります

@Beanメソッドを使うことで、ライブラリ内でクラスのインスタンスを作成できます。 @Serviceメソッドを使うと、ライブラリ内の対応クラスに@Serviceコメントを追加できません。

知識が最小

最小知識の原則は次の意味を持ちます:

機能を完了するのに必要な技術や知識が少ないほど、プロジェクトのシンプルさを確保し、学習の難しさを減らすために良いです。

クラスライブラリ内で@Serviceを使ってクラスのインスタンスを作成することはできないため、同様のニーズがある場合はフォーム@Configurationと@Beanを使う必要があります。 この時点で、プロジェクト全体には@Service、@Configuration、@Beanといった注釈があり、これらの注釈は同じ役割を果たし、つまりビーンを作成するのです。

@Serviceの場合、@Service、@Component、@Configuration、@Beanが同時に発生する確率が高いです。

@Configurationと@Beanを用いることで、@Serviceや@Componentの使用を完全に排除でき、これは最小知識の原則に沿っています。

ちなみに、Spring BeansはXMLで作成され、その後設定にはJavaが使われました。 XMLを使わない主な理由は、XMLが十分に簡潔でなく、コンパイル時チェックなどの機能がないからであり、ビーンズの作成をクラス間で分散させる必要性が求められているからです。

まとめると、著者は@Configurationと@Beanの手法を好んで用いています。




先の:Pythonコマンドラインから画面を消す簡単な方法
次に:分散ロックのいくつかの使い方(redis、zookeeper、database)
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com