現在リフレクションAPIを使用してフレームワークを
使いやすく構築しようとしているのですが、
以下の例の抜粋コードで、一点わからないことがあります。
1:Object bean = beanField.get(action);
2:Class<?> beanClass = bean.getClass();
3:Method validMethod = beanClass.getMethod("valid");
4:if (void.class.equals(validMethod.getReturnType())) {
5: // void 型
6: validMethod.invoke(bean);
7:}
6行目の invoke() で bean クラスの valid メソッドを呼び出しています。この時点でデバッグしたところ、bean が保持しているインスタンス変数に値が正常に格納されているのですが、
実際に bean.valid() メソッド内にデバッグが進んだ時、bean 内のインスタンス変数が全て null となってしまっています。
invoke したメソッド(ここではvalid)内で、自分自身(bean)のインスタンス変数値を取得することはできないのでしょうか。
invoke の引数に bean を渡しているから、取れる気がするのですが、、
お分かりになればどうかご教示ください。
以上、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
うまくいくはずですが?
beanクラスも提示したほうが回答が得られると思いますが?
// main
package sample;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
try {
Bean bean = new Bean();
System.out.println("value: " + bean.value);
bean.setValue();
System.out.println("value: " + bean.value);
Method method = Bean.class.getMethod("valid");
if( void.class.equals(method.getReturnType()) ) {
method.invoke(bean);
System.out.println("value: " + bean.value);
}
} catch( Exception e ) {
e.printStackTrace();
}
}
}
// bean
package sample;
public class Bean {
public String value = null;
public void setValue() {
this.value = "test";
}
public void valid() {
this.value = "sample";
}
}
ご回答ありがとうございます。
こちら色々と試している内に、おおよその原因がわかりました。
bean オブジェクトを springframework の管理下に置いているのですが、
public メソッド(valid)に対して aop によるインターセプトが発生し、
予期せぬ動作になっているようです。
public final とし、spring 側でオーバライドできなくすれば、
期待通りの動きになるようですが、それはそれで業務側でオーバライドできなくなってしまうため、現在別の策を調査中です。
大変お手数おかけしました。
こちらのソースコードも参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングの問題です。大...
-
初心者なので教えてほしいです。
-
インタフェイス実装と抽象クラ...
-
元旦からの経過日数を求めたい
-
複素数の計算するクラスを足せ...
-
DESを使用した暗号化/復号化処...
-
eclipseのコンソール
-
Javaでデータベースの内容をGUI...
-
javaに関する質問です
-
Javaがうまく動作しない理由
-
(長文です。すみません。)rep...
-
TCPプログラミング
-
[JAVA]try 内の変数を外で!?
-
VBAで配列の計算
-
【Java8以降】csvファイルの複...
-
Java配列でNullPointerExceptio...
-
オブジェクトの中のプロパティ...
-
JPanelの切り替えと再描画
-
Java 読み込んだテキストファイ...
-
eclipseでコンソールのピン留め...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
中カッコ{}だけの記述について
-
プログラミングの問題です。大...
-
NoSuchMethodErrorが解決できま...
-
Javaでlog4jを使ってログ出力を...
-
System.exit()の値を取得したい
-
コンストラクタの引数の中のnew?
-
Javaで日本語の出力が文字化けする
-
インタフェイス実装と抽象クラ...
-
randomで
-
Java プログラム public class ...
-
日本語が文字コードによっては...
-
Socketの接続のタイムアウトを...
-
GetterとSetterをやったのに。
-
javaで特定の文字列から特定の...
-
JSP/Servletのパラメータの受け...
-
(1)を表示するには
-
【初心者です】javaで平均値を...
-
javaのプログラミングで作るRPG...
-
【java】同ディレクトリ別ファ...
おすすめ情報