問題タブ [invocationhandler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java-呼び出しハンドラーを作成しますか?
オブジェクトを生成し、すべてのパブリックメソッドをインターセプトするファクトリクラスを実装しようとしています。
ここで2つのメソッドを呼び出そうとしています。1:すでに呼び出されたメソッド2:私のベースのメソッド。どうすればこれを達成できるか考えていますか?
私の抽象クラス:
annotations - ネストされた Jsr 303 検証アノテーション
クラス レベルの注釈制約を使用したいと思います。ただし、内部制約を自動的に検証することはできません。この手法に検証グループを組み込むために、一部を支援したいと思います。
私は現在、そのように制約をトリガーしています。
ただし、これは明らかにひどいものです。最終的には AnnotationInvocationHandler.invoke() メソッドを呼び出して isValid メソッドをトリガーするようにリファクタリングしますが、まだ少し先です。
私の問題は、すべての ConstraintB インスタンスが ConstraintA に渡されることです。適切なグループを持つものだけが ConstraintA に渡されることを望みます。この能力が存在するとは思えないので、どのグループがトリガーされる必要があり、どのグループがトリガーされないかをどのように識別できますか?
どのグループをトリガーするかを指定するオブジェクトがデバッグに表示されませんか?
何か案は?
java - 動的プロキシ: ネストされたメソッド呼び出しを処理する方法
Java で動的プロキシを学習しようとしています。
それらがどのように機能するかは知っていますが、私の問題の解決策を見つけることができません: インターフェイスと、メソッド a()、b() および c() を使用したその実装がネストされている場合 (a() が b( を呼び出すとしましょう) ) c()) を呼び出します。オブジェクトをプロキシして、メソッドへの各呼び出しをログに記録したいと思います。
そのため、実行前にログ行を出力する invoke() メソッドなどの InvocationHandler をコーディングします。
しかし、proxy.a() を呼び出すと、メソッド a() の呼び出しのみが記録され、メソッドのチェーン全体は記録されません。
私は何が欠けていますか?プロキシのターゲットはプロキシ自体でなければなりませんか?
android - android 汎用 SQLite データベース
メソッド呼び出しを (json Web サービスから) インターセプトし、結果をローカル SQLite データベースにキャッシュする小さな java.lang.reflect.InvocationHandler を開発しました。インターネット接続がない場合、結果はローカル キャッシュから読み取られます。
すべて正常に動作します。私の問題は次のとおりです。
傍受されたすべてのメソッドは異なるエンティティを返すことができ、リフレクションを使用して各エンティティを異なるテーブルに保存します。作成する必要があるすべてのテーブルを事前に把握していないため、「{ENTITY_NAME} が存在しない場合はテーブルを作成する」という SQLiteOpenHelper を作成するたびに、データベースのバージョンを 1 増やすたびに onUpgrade メソッドが呼び出されます。 .
これは開発環境で機能しますが、私はそれがまったく好きではありません。
データベースを新しいテーブルで更新するためのより良い解決策を誰かが推奨できますか?
ありがとうございました
java - InvocationHandler でのプロキシされたオブジェクトのインスタンス変数の設定
Proxy オブジェクト ( を実装するオブジェクトjava.lang.reflect.InvocationHandler
) で、プロキシされたオブジェクトにインスタンス変数を設定しようとしています。
次のように:
これは安全ですか?
編集:
実際のコード:
Edit2 : プロキシされたオブジェクトは、同じプロキシされたオブジェクトの複数のメソッドを同時に呼び出す GWT クライアントから呼び出されています。これが発生すると、(プロキシされたクラスの) セッション インスタンス フィールドが閉じられ、予期しない方法で開かれます。
java - アスペクトを使用して Proxy クラスなしで InvocationHandlers を注入する
メソッドへのすべての呼び出しをログ情報 (たとえば before/after ステートメント) を使用してスーパークラスにプロキシするクラスを作成したいと考えています。
ただし、このクラスを使用するフレームワークは、新しい (..) 呼び出しを介して、または他のリフレクション メカニズムを介してクラスをロードするため、プロキシ セマンティクスを使用してクラスを起動することはできません。
すべての場合にプロキシを使用するために new および newInstance() 操作を取得する方法はありますか? または、プロキシ API を使用して InvocationHandler クラスのインスタンスを明示的に作成する必要がありますか?
具体的には、実行時に XML ファイルからクラス インスタンスを作成する独自の方法 (hadoop - mapreduce) を既に持っている分散フレームワークをデバッグしています。
java - Javaで静的メソッドをインターセプトする方法
クラス Test には静的メソッド 'say' があります。この静的メソッドをインターセプトするにはどうすればよいですか? InvocationHandler を使用して作業する方法はありますか?
前もって感謝します
java - Jersey ResourceMethodInvocationHandlerProvider で例外をスローする
このスレッドRegistering a custom ResourceMethodInvocationHandler in Jerseyに基づいて、JSON をアンマーシャリングした後、Jersey リソース メソッド呼び出しをインターセプトすることができました。
しかし、メソッドを呼び出す前に、MyInvocationHandler で何らかのロジック (例: 禁止された例外) に基づいてカスタム例外をスローするにはどうすればよいですか。これを行うと、500 エラーが発生しますjavax.servlet.ServletException
。
403 禁止の代わりに 500 エラー コードでエラーを下回る
java - 呼び出しハンドラを使用して SQL セッションを開いたり閉じたりする
Mybatis を使用してデータベースの CRUD アプリケーションを作成していますが、SQL セッションを開いたり閉じたりするときにすべてのメソッドに繰り返しコードが含まれているため、呼び出しハンドラーを使用してコードの繰り返しを最小限に抑えたいと考えています。ほとんどすべてのメソッドは次のようになります。
私の質問は、アプリケーションがスレッドセーフのままであることを念頭に置いて、呼び出しハンドラーを適切に作成して呼び出すにはどうすればよいですか?