軽量のJava Webフレームワークの原則

軽量のJava Webフレームワークを構築します

    MVC(モデル - ビュー - コントローラ、モデル - ビュー - コントローラ)は、このパターンでは、アプリケーションを分離するために使用することができる、一般的なデザインパターンです。

IOC

    コントローラコントローラクラスはクラス内のアノテーションによって定義され、メンバ変数は、あるサービスを注入注釈、一連の定義することができ、「依存性の注入。」加えて、これらの対処方法でアクション音符によって定義される(アクション法と呼ぶ)方法の一連があり、特定のビジネスロジックを達成するためにサービスメンバー変数メソッドを呼び出します。Viewオブジェクトを返した場合、JSPページを示し、データオブジェクトは、データが示すJSONを返す場合。

    私たちは、このような親クラスのようなインターフェイスを実装して、特定の注釈付きクラスまたはクラスの使用などの基本パッケージ名内のすべてのクラスをロードするために「クラスローダ」を開発し、その後、すべてまたはサブクラスを継承する必要があります。

    ただ、現在のスレッドのClassLoaderを取得するには、最も簡単なを実装するクラスローダを取得します。

    私たちの目標は、サービスクラスの依存性の注入に来るコントローラクラスに注入するアノテーションを使用し、サービスクラス上のサービスアノテーションを使用し、コントローラクラスのメソッドにアクションアノテーションを使用して、コントローラクラスのコントローラ上のアノテーションを使用することです。4注釈カテゴリをカスタマイズする必要があります。

    コントローラオブジェクトは、管理フレームワークスマート豆の理解によって生成されたアノテーションのサービスクラスに注釈を付けることができます。

    我々はいつでも地図を取得する必要があり、<オブジェクト、クラス<?>>オブジェクトをインスタンス化するクラスに応じて、オブジェクトが毎回作成し、最終的に静的な地図に格納され、すべてのカテゴリ豆のスマート管理フレームワークを取得する必要がありますが、また、私たちは、キー(クラス名)によって地図に対応する値(Beanオブジェクト)を取得する必要があります。地図<クラス<?>、オブジェクト>は豆Mapインスタンス内のクラスとビーンビーンとの間のマッピングを格納する「ビーン・コンテナ」に相当し、我々は唯一のクラスビーンに渡し、getBeanメソッドに必要な、豆は得ることができるようになりますインスタンス。

    私たちは、その後、その後のアプローチのアクションコントローラのメソッドでは、サービスメンバ変数を呼び出し、サービスCotrollerのメンバ変数を定義しました。だから、どのようにサービスのメンバ変数をインスタンス化するには?

    以前にそれを定義した注釈を注入覚えていますか?私たちは、サービスがインスタンス化を実装するためにそれを使用します。だから、誰がそれをインスタンス化しようとしていますか?

    一例としてではない新たな現像剤自体、むしろのIoC(制御の反転、反転制御)と呼ばれるそのようなインスタンス化プロセスとしてフレーム自体、インスタンス化されます。コントロールは、開発者によって決定されていないが、フレームを反転させます。クラスは、このカテゴリに注入メンバーに頼る必要があります。一般に、我々はまた、コントロールDI(依存性の注入、依存性注入)の反転と呼ぶことにする、理解することができます。だから、どのように依存性の注入を行いますか?

    最も簡単な方法は、最初にBeanHelper(クラスやオブジェクト間の地図<クラス<?>、オブジェクト>構造、レコードのマッピング)によって、すべてのBeanMapを取得することです。次いで、マッピング関係をトラバースし、ビーンBeanクラスのインスタンスを除去し、その後、反射して、すべてのクラスのメンバ変数を得ます。変数がトラバースし続ける部材は、注釈に関連付けられている場合、現在の部材とループ変数は、注釈を注入するか否かを判断する、クラスの地図ビーンビーンビーン例から取り出されます。最後に、ReflectionUtil#setField法でメンバ変数の現在の値を変更します。

    この場合、IoCのフレームワークオブジェクトは、単一ケースによって管理されているのIoCフレームワークは、基礎となるまたはオブジェクトのビーン地図が事前に作成し、豆の容器に入れている、むしろBeanHelperからビーン地図を取得しているため、すべてのオブジェクトは、単純な関心事です。

要求フォワーダー

    私たちは、それが処理するためのロジックを、以下、ControllerHelperクラスを作成する必要があります。

    ControllerHelpによって、我々はすべてのクラス定義されたコントローラ注釈へのアクセス権を持っている、すべてのそのような方法は、作用を反射することによって得ることができる、式アクション注釈取得要求(「アクション」法と呼ばれる)の注釈付き、その後、取得要求メソッドを要求しますパス、リクエストオブジェクト(リクエスト)および処理(ハンドラ)をカプセル化し、最後に要求ハンドラとアクションマップに配置されたマッピング関係を確立するために、リクエスト経路に従って処理要求方法を得る方法を提供します。

    今、あなたはそれがすべての要求を処理させる、サーブレットを記述する必要があります。ControllerHelper#getHandlerハンドラオブジェクトメソッドにより取得された要求パスHttpServletRequestオブジェクトからの要求を取得する方法。Handlerオブジェクトを取得する場合、我々は簡単にコントローラクラスを取得し、さらにBeanHelp.getBean法によりオブジェクトインスタンスのコントローラーを得ることができます。

    MVCの開発が完了する簡単なフレームは、すべての要求を処理するために、こののDispatcherServletを介して、要求情報に従って、対応するアクションControllerHelperメソッドから取得し、渡された特定のメソッドパラメータを必要としながら、反射技術を使用してアクションメソッドを呼び出し、そして最終的に取ります戻り値の戻り値の型は、対応する処理を実行するかを判断します。

    クラスによって定義されたコントローラコントローラアノテーション、メソッド定義されたアクションのアクション注釈、依存性注入をInejctアノテーションによって達成されます。ヘルパークラスの一連のMVCフレームワークを初期化します。DispatcherServletのすべての要求を処理するには、データ型は、JSONデータを返した場合ビューのタイプは、JSPページにジャンプする場合はアクションメソッドは、パス要求に応じて特定のリクエストメソッドを動員するために、戻り値は、アクションを決定しています。

AOP

    AOPでは、コードを記述する態様(セクション)クラスを定義する必要があることは、上記性能監視コードであり、クロスビジネス・ロジックを必要とします。さらに、我々は条件がAOPでポイントカット(カットオフポイント)と呼ばれ、条件によってブロックするクラスと一致する必要があります。

    エージェント、またはあなたがそれをしないことを意味し、プロキシと呼ばれる、に対処する代わりに、あなたの他の誰か。

    ダイナミックCGLIBを介して作用します

    クライアントコードでAspectProxyを継承しました。

    プロキシによってターゲットクラスのCGLIBはAOP、targetClass元のクラスを達成した後に返さ

    Object proxy = ProxyManager.createProxy(targetClass, proxyList);
BeanHelper.setBean(targetClass, proxy);

おすすめ

転載: www.cnblogs.com/kexinxin/p/11608079.html
おすすめ