ホームページ Java &#&チュートリアル JAVAEE プロジェクトの構造と同時実行性の考え方

JAVAEE プロジェクトの構造と同時実行性の考え方

Jan 17, 2017 am 11:11 AM

長い間 javaee 分野を支配してきた足場は、spring struts2 mybatis/hibernate によって主導されています。

Spring:

Spring は Java サービスだけのものではありません。 CGI 標準の実装として、Spring は単なる Java 分野のフレームワークではなく、C# プラットフォームでも恩恵を受けることができます。Spring は、Javaee プロジェクトを大幅に簡素化する、抽象化や bootde 統合ソリューションなどのさまざまな便利なアノテーション構成メソッドを提供します。スプリングを使用するプロセスには 2 つの側面があります。1 つの部分は軽量アノテーションであり、もう 1 つの部分は完全なアノテーションに傾いています。

まず第一に、アノテーションの前提は、プロキシ、動的、静的、cglib プロキシを経由する必要があるということです。軽量のアノテーションの場合、パースペクティブは静的またはワンタイム アノテーションです。

コントローラー アノテーションなど、これらのワンタイム アノテーションまたはコンパイル時アノテーションは、サービスに関連する暗黙的なワンタイム スキャンとしてプロジェクト コンテキストで初期化されます。シングルトンの軽量オブジェクト インスタンスを提供します。第一選択と考えられます。これにより、実行時のプロキシとリフレクションのコストが削減され、実行時のスタックのリソースが節約されます。

もう 1 つのタイプは、動的アノテーションまたはランタイム アノテーションであるレスポンスボディです。リクエストが行われるたびに、アノテーションの反映が実行されます。実行時の注釈は当然ながらリソースを占有します。

一般に、アノテーションが必要ない場合は、サーブレットベースのリクエストとレスポンスのメソッドに基づいて、解決できない mvc、パラメータの取得、パラメータの受け渡し、戻りなどはありません。アノテーションは実行時アノテーションをまったく必要としないため、このプロセスのさまざまな欠点を補うために、メソッド内で使用するアノテーションを実行するために循環動的アノテーションが実行されます。メソッド内に記述されたparamアノテーションについて、request getを使用した場合と比較して不足しているコードは何ですか?元のワンステッププロセスにコードインターセプトの層を追加するだけです。

注釈が実行時注釈であるかコンパイル時注釈であるかを確認する方法は非常に簡単です。Ctrl キーを押しながらマウスをクリックすると、次のように表示されます。 Retention(RetentionPolicy.RUNTIME)

@Documented

Retention この列挙型は、使用するアノテーションの有効期間を完全かつ明確に説明します。

Spring を使用します。これは、プロジェクトのプロトタイプ オブジェクトにリソース識別の競合が発生することを除けば、シングルトンは同時実行性とは何の関係もありません。 、これは、MVC が基本的にパラメータを受け取って返すことを意味し、個別のリクエスト応答には受信したものと送信したものが完全に分離されています。 mybatis に関しては、多くの人が mybatis の 1 つの構成でさまざまな Bean を行き来しますが、そのたびに、パラメータと結果としての Bean は Mybatis 上で明確な SQL メンテナンスを行う必要があります。 jdbc の効率を大幅に低下させる代わりに、Bean を気にする人は多くありません。問題が発生するとメモリを追加したり、気にしたりしません。唯一の解決策は時間です。時間とスペースを交換することです。同じパラメータと結果のマッピングでは、新しい Bean を自分で作成して JDK のマップを使用するのが良いでしょうか? 当然、JDK 自体のオブジェクトを新しくするのはコストがかかると私はずっと信じてきました。自分で Bean を定義するよりもずっと簡単です。なぜなのか、申し訳ありませんが、私にもわかりません。だから私はいつも来るときも行くときも地図を描きます。 mybatis を使用する場合、自分のものがクラスにプロキシされているかどうかを注意深く確認する必要があります。その方法は非常に簡単で、プロジェクト ログでデバッグを開き、ログが毎回新しい sqlsession を作成しているかどうかを確認します。 mybatis セッションはプールされておらず、メソッド内で競合する SQL が出現した場合、エラーは発生しませんが、データベースは SQL を実行しません。すぐに、接続プールがすぐに使用され、新しい接続が頻繁に作成されることがわかります。もちろん、mybatis なしでできる場合は、ためらうことなく、使用しないのが正しいです。

なぜ静的アノテーションを使用する必要があるのでしょうか? それは非常に単純です。プロジェクトが十分に大きい場合、これらのシングルトンは何を占有するのでしょうか。オブジェクト インスタンスはヒープ領域にあり、参照はスタックにあります。それでは、GC はいつこれらのシングルトン オブジェクトをリサイクルするのでしょうか?あなたが思うこと?したがって、アノテーションに基づく場合は、動的プロキシの使用を減らすようにしてください。必要な場所に、より多くのリソースを残しておきます。

昔はヒープのないスタックなしと言っていましたが、現在はjdk1.7の文字列定数プールがヒープに置かれるようになりました。

コンパイルと解釈ではどちらが優れていますか? もちろん分析的ですが、コンパイルは中間モデルに似ています。したがって、優れたコンパイル言語を構築することは、インタプリタ言語よりもはるかに困難です。

Web の構造は非常に明確です。まず、コンテキストがあり、次に一連のコンポーネントが順番にあります。これは Javaee の標準です。コンポーネントはプロトコル標準であり、誰もが持つ必要があります。そうすると、多くのプロジェクトのサーブレット マッピングが / であることがわかります。これは非常に単純なので、js や css をサーブレット経由で処理する必要がないため、マッピングでは主にサーバーとの対話が考慮されます。 Webコンテナの-側コンポーネント 通常、.doと.actionの2種類の識別があり、.doは権限認証が必要で、アクションは直接解放されます。 js などはサーブレットに入る必要がなく、Web コンテキストは URL に従って直接返され、MVC での MVC インターセプトとリリースは不要であり、問​​題が発生し、問題を解決する良い方法ではありません。問題。このように、nginx の介入に関係なく、静的リソースは Web コンテナに対して静的であり、サーブレットとの関係はありません。サーブレットは、処理する必要があるものだけを扱います。

jsを書くのに最適な場所はどこですか?

多くの人は js を jsp または html で書くことに慣れていますが、それは良くありません。

プロジェクトを構築するときは、js と css がブラウザーによってキャッシュされることを期待する必要があります。

ページの script タグに書かれた js は単なるタグであり、div や input と何ら変わりはなく、キャッシュされません。多くの情報を確認したところ、キャッシュには の単位が明記されていました。キャッシュはファイルです。ラベルの代わりに。したがって、ファイルにCSS JSを記述し、ファイルがキャッシュされるようにファイルをインポートします。これは私の推測にすぎないため、完全にはわかりません。

jsp は実際にはサーブレットなので、動的翻訳のためにクラスをロードする必要があるたびに、クラス内の write メソッドがページをブラウザに書き込み、ブラウザがそれをレンダリングします。それは HTML であり、静的です。サーブレットなので、Java オブジェクトであり、さまざまな Java タグやメソッドが可能であることは間違いありません。静的ページは同様のマクロ言語を使用するため、直接 JSP を使用することをお勧めします。

一度にページに読み込む必要があるデータの量はどれくらいですか?

ページにカテゴリやリストに従って表示されている場合、データの量は非常に少なく、数百のアイテムで、種類は現在のテイクアウト注文アプリに表示されており、すべてのカテゴリとデータが一度に与えられるため、処理はエンド側の処理、カテゴリー切り替え、プレビューなど全プロセスは検索も含め全てページ上で処理されます、A社の携帯電話やパソコンで実行されるJSはB社の携帯電話やパソコンと競合しません。毎回タイプを切り替えるには、ajax を使用するだけです。これらはすべて同じ Web コンテナー グループに属しているため、競合が発生します。操作の頻度が高くなるほど、競争は激しくなります。この点は実際の現場と密接に関係しています。

クエリによって返されるデータの量は、パフォーマンスとはほとんど関係ありません。数千、数万のデータはわずか数十 KB です。

クエリの数、つまりサーバーとの対話の数は、全体的なパフォーマンスの直接の原因です。

クエリ内のデータの量は、クエリ対象のテーブルのサイズに比例します。一度に 10 個のアイテムを返してもクエリは高速化されません。また、一度に 1,000 個のアイテムを返してもデータベースの操作は遅くなりません。は本質的にコレクション アプリケーションであり、何も作成されません。

最適な量を与えることがチューニングの前提ですが、与えれば与えるほど適切になるというわけではありません。桁が違う。

必要に応じてキャッシュを使用します。

データベースまたはマスター/スレーブの分離など、現在のデータベースではビジネスをサポートできない必要があります。音量。

単一のケースが最良の方法です。

特定の言語に関係なく、マルチスレッドは鋭い剣です。

Maven 管理は良い方法ですが、暇でない限り、Maven プロジェクトを構築してから Web プロジェクトに変換するのではなく、Web プロジェクトを作成して Maven をコンポーネントとして埋め込む必要があります。

バネを使って、現状最高の足場です。

可能であれば、できるだけ jdbc を使用してください。

クライアントで何かを実行できる場合は、サーバーと対話しないでください。クライアントのリソースは膨大ですが、サーバーのリソースは限られています。

リアルタイム アプリケーションでない限り、送信するリクエストの数が少ないコードが良いコードです。

コード内のすべてのツールはツールであり、API は最も理解する必要があるものであり、どれが優れていてどれがそうでないかについての正確な答えはありません。

すべてはオブジェクトであり、Java にとっては純粋です。プロキシはオブジェクト、リフレクションはオブジェクト、オブジェクトはオブジェクトですが、基本的なデータ型はオブジェクトではありません。

基本的なタイプを除いて、プロセスがどれほど複雑であっても、対応するオブジェクトのメソッドとそのメソッドのパラメーターを組み合わせて実行されます。クラスをシリアル化および逆シリアル化する方法。端的に言えば、ファイルの IO と送信、そしてそれらを jvm にロードしてオブジェクトに構築することです。

rpcrpc がスレッド内で何かを呼び出しているのではなく、呼び出されているものがプロキシされる理由は、プロキシがユーザーのニーズをパラメーターに変換し、それらをデータ ストリームとして送信するためです。サーバーは、ユーザーのリクエスト ストリームをオブジェクトに変換します。ストリーミングされて送り返された後、オブジェクトを構築し、オブジェクトを通じてそれを処理します。

NIO は良い方法であり、netty は良い選択です netty を超えるマルチスレッドソケットはありますか?

zookeeper は、優れた分散登録などの一連のソリューションに最適なツールです。

これらは原則とオブジェクトなので、使用するにはよく調べなければなりません。

上記は私の個人的な理解ですので、修正は歓迎です。

JAVAEE プロジェクトの構造と同時実行性の考え方に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

名前を数字に変換してグループ内でソートを実装する方法は? 名前を数字に変換してグループ内でソートを実装する方法は? Apr 19, 2025 pm 01:57 PM

名前を数字に変換してグループ内でソートを実装する方法は?ユーザーをグループでソートする場合、ユーザーの名前を数字に変換して、異なる可能性があることがよくあります...

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

See all articles