SpringBoot Learning (03): 弱い言語アノテーションと SpringBoot アノテーションの類似点と相違点

弱い言語の代表: Hyperf、PHP Swoole 拡張機能に基づく常駐メモリ フレームワーク

注釈の概念の例。

  1. 端的に言えば、あなたがリーダーであり、幹事さんに日常的なことの整理を手伝ってもらい、コメントするだけで済みます。例えば、来週イベントを開催したい場合、幹事さんは企画書をあなたに渡します。承認。読んだ後、コメントすることができます。ゲストとして 4 人の著名な専門家を見つけ、宣伝パンフレットを作成するために高品質の写真を 10 枚撮影します。通知を受け取った後、秘書がこれら 4 人の招待をお手伝いします。 - ご要望に応じて、著名な専門家が写真を大量に撮影し、同時に高品質の写真を 10 枚選択して小さなマニュアルを作成します。

  2. アノテーションは一種のアノテーションであるため、アノテーターはそれを実行する必要がなく、アノテーション内でコードの詳細を確認することはできませんが、アノテーションによって渡されるオプションのパラメーターのみを定義します。

  3. これは、アノテーションを理解するリーダーの方法です。また、流れ作業員の観点からも理解できます。各流れ作業員は採用された後、会社のことや部門がいくつあるかについてはあまり知りませんが、彼らが到着したらすぐに始められるように。仕事を始めましょう。たとえば、作業者 A が今行っていることは、職章にピンを追加することであり、ピンの目的はネームプレートを吊るすことですが、現在の流れ作業者は、誰がネームプレートを追加するのかを知りません。注:ネームプレートを掛ける場合、管理者はネームプレートを掛けに来た作業員に衣類の仕分けの際にネームプレートを掛けるようお願いします。

    1. このようにして、従業員の行動が十分に詳細に分類され、スケジュール設定プロセス全体が別のシステムによって制御されるため、各従業員の仕事が容易になります。従業員は自分が何をしたいのか、何が必要なのかを知るだけで済みます。前のプロセスや次のプロセスが誰であるかは気にしないため、完全な分離が達成されます。

  4. 理解できるようにコード レベルに変換すると、コメントを追加したコードは直接実行されません。Spring Boot のスターターであるオーガナイザーが存在します。このスターターは、注釈付きのすべてのクラス (募集リスト) を自動的にオブジェクトに作成します (組立ラインの作業員を事前に募集するのと同じように、各作業員には独自のツールが装備されています。組立ラインが開始されると、スターターがリクエストの配布を開始し、各リンクで対応するスケジュールを設定します。ワーカーが処理を実行し、処理が完了すると次のワーカーに引き渡されて処理が行われるため、注釈が付けられたソース コードはパイプライン全体の論理ノードにすぎません。この論理ノードは埋め込みノードとも呼ばれます。

  5. 実行プロセス中、強い言語と弱い言語ではアノテーションの処理方法が異なるため、2 つのソリューションが作成されました。SpringBoot は Java に基づいており、アノテーションは言語機能であるため、多くの処理ロジックの詳細は、言語が公開されていないため、開発者にとってよりフレンドリーです。Hyperf は PHP に基づいています。PHP にはアノテーションの概念がないため、アノテーションの処理プロセスを完全にシミュレートする必要があります。そのため、Java は新しいセットを生成します。 PHP にはコンパイル処理がないため、hyperf が独自にコンパイル処理を実装する必要がある アノテーションコードから Hyperf が Proxy コードを生成し、実際に Proxy コードが実行される Java がクラスコードを実行し、実際のコードが実行される実行もクラスコードですが、このとき 2 つは統合されます。

  6. SpringBootしか学ばなかった人にとっては、JAVAがこの処理を公開していないため、この処理を理解するのは難しく、この処理については、JAVA以外の上級プログラマからしか学ぶことができないため、単一言語プログラマはぼんやりした状態になるでしょう。長い間認知。

  7. 同様に、コルーチンの概念もあります。GO 言語だけでコルーチンを理解するには (詳細は説明せず、直接行ってください)、それでも同期言語であり、コルーチンは本質的に非同期言語であり、始めると間違いなく混乱するでしょう。 Python のコルーチンに触れる場合、あまりにも多くの詳細が明らかになります (そして、Python は同期言語でもあるため、さらに混乱が生じます)。ブラウザ自体がすでにコルーチンを実装しているため、中間の Javascript から始めますが、一部のイベントとイベント監視はすべてコルーチン プログラミングであるため、途中のプロセスでコルーチンのゲームプレイ (yield 構文の使用) を徹底的に体験できます。 yield に精通している場合は、Python を実行して自分で開始するシミュレーションを行うことができます。ブラウザーのイベント ループ サービスを実行してから、yield を実行すると、理解が突然明確になります。これを理解して Go を学習すると、基本的にはより多くのことができるようになります快適なので、よくプレイできます。

上記の説明を読めば、初心者ユーザーもアノテーションについて突然理解できるようになると思います。

https://www.bookstack.cn/read/hyperf-2.0/annotation.md

アノテーションとは アノテーションとは何ですか?

注解アノテーションを説明する前に、以下の違いを定義する必要があります注释

  • コメント: プログラマーが見て、コードの理解を助け、コードを説明および解説するためのものです。

  • 注: アプリケーション プログラムの場合、メタデータに使用される定義は、単独で使用しても効果がありません。メタデータを使用して効果を発揮するには、アプリケーション プログラムと連携する必要があります。

このアプリケーションは、 hyperf の起動プログラムとして理解できますbin/hyperf.php。このプロセスを認識して特定の処理を実行します。特に、 hyperf はいくつかのアノテーション タグをカスタマイズします。起動すると、bin/hyperf.phpアノテーション タグが含まれたソース コードを実行コードに変換します。特定の実装時に使用されます。 。プロキシ クラスを生成するプロセスは、npm のプリコンパイル プロセスと同じであり、コードが再生成されます。実際のパッケージ化されたコードは、ソース コードではなく、npm で事前にコンパイルされたコードであり、hyperf が実際に実行に参加するコードは、作成したソース コードではありません。プロキシ クラスの生成方法を認識しているため、デバッグする場合は、次のように入力します。ブレークポイントは役に立たないため、プロキシ クラス内のポイントをブレークする必要があります。

SpringBoot アノテーション

  1. Hyperf の実装ロジックには大きな違いはありません。違いは言語の特性です。PHP 言語にはアノテーションの概念がありません。PHPDoc は 1 つだけあり、ドキュメントを自動生成するために使用されます。ドキュメントは自動生成できるため、生成されると、ある程度識別できる必要があるため、PHPDocを使用してアノテーションを実装するだけの人もいます。@を含む文字に遭遇する限り、@文字以降の内容を取得すると、その内容に応じた処理ロジックを実行できます、それでOKです

  2. Java アノテーションは言語自体の属性であり、コンパイル時および実行時に直接取得できるため、解析プロセスが直接節約され、アノテーションでマークされたクラスと属性を収集するだけで済むため、アプリケーションはアノテーションを割り当てることができます。統合処理のために収集したデータを収集します。

  3. SpringBoot は Web プロセス全体を記述し、入力する多くのコンテンツを予約しています。入力するこれらの場所には、たとえば、 、 などの名前が付けられ、作成したコード上のコンテンツにマークを付けてから、実行時に SpringBoot を実行@Controllerます@Service@Repository, 空白を埋めたことはわかります。ロジックを使用する必要がある場合、ロジックはコレクターから抽出されて実行されます。同時に、何かを取得する必要もあります。たとえば、これらの注釈にはコンテンツを入れることが@Valueでき@Configurationます直接入力しますが、このプロセスは実行時に行われます。ロジックを実装するためにここで使用するだけで、アセンブル後は通常どおり実行できます。これは組み込み Web 開発としても理解でき、外部データは完全に独立して処理されます。そして結果が返されます。

  4. SpringBoot アノテーションはコンパイル完了後の SpringBoot 起動時に実行されるため、コンパイルチェックは引き続き実行できます。

Python/PHP の考え方 SpringBoot シリーズの探索

知識の学習はすべて相互に関連しています。まず、これまでに調べたことを見てみましょう。

  1. SpringBoot 学習 (01): javac、src/main/java ディレクトリ、Maven および pip なぜ弱い型付け言語はサブモジュールでコンパイルされないのですか?
  2. SpringBoot の学習 (02): 組み込みシステムから組み込みサーブレットへの SpringBoot の進化_Sen Ye のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/wangsenling/article/details/132383491