public class MethodInvoker extends ObjectSE
使用方法: "targetClass "/"targetMethod" " または "targetObject"/"targetMethod" " を指定し、オプションで引数を指定して、呼び出し元を準備します。その後、メソッドを何度でも呼び出して、呼び出し結果を取得できます。
修飾子と型 | フィールドと説明 |
---|---|
protected ClassSE<?> | targetClass |
コンストラクターと説明 |
---|
MethodInvoker() |
修飾子と型 | メソッドと説明 |
---|---|
protected MethodSE | findMatchingMethod() 指定された引数に指定された名前を持つ一致するメソッドを見つけます。 |
ObjectSE[] | getArguments() メソッド呼び出しの引数を返します。 |
MethodSE | getPreparedMethod() 呼び出される準備済みの Method オブジェクトを返します。 |
ClassSE<?> | getTargetClass() ターゲットメソッドを呼び出すターゲットクラスを返します。 |
StringSE | getTargetMethod() 呼び出されるメソッドの名前を返します。 |
ObjectSE | getTargetObject() ターゲットメソッドを呼び出すターゲットオブジェクトを返します。 |
static int | getTypeDifferenceWeight(ClassSE<?>[] paramTypes, ObjectSE[] args) 候補メソッドの宣言されたパラメーター型と、このメソッドが呼び出されることになっている引数の特定のリストとの間の一致を判断するアルゴリズム。 |
ObjectSE | invoke() 指定されたメソッドを呼び出します。 |
boolean | isPrepared() この呼び出し元がすでに準備されているかどうか、つまり |
void | prepare() 指定されたメソッドを準備します。 |
protected ClassSE<?> | resolveClassName(StringSE className) 指定されたクラス名をクラスに解決します。 |
void | setArguments(ObjectSE... arguments) メソッド呼び出しの引数を設定します。 |
void | setStaticMethod(StringSE staticMethod) 呼び出す完全修飾静的メソッド名を設定します。 |
void | setTargetClass(ClassSE<?> targetClass) ターゲットメソッドを呼び出すターゲットクラスを設定します。 |
void | setTargetMethod(StringSE targetMethod) 呼び出されるメソッドの名前を設定します。 |
void | setTargetObject(ObjectSE targetObject) ターゲットメソッドを呼び出すターゲットオブジェクトを設定します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setTargetClass(@Nullable ClassSE<?> targetClass)
public void setTargetObject(@Nullable ObjectSE targetObject)
public void setTargetMethod(@Nullable StringSE targetMethod)
public void setStaticMethod(StringSE staticMethod)
public void setArguments(ObjectSE... arguments)
public ObjectSE[] getArguments()
public void prepare() throws ClassNotFoundExceptionSE, NoSuchMethodExceptionSE
protected ClassSE<?> resolveClassName(StringSE className) throws ClassNotFoundExceptionSE
デフォルトの実装では、スレッドコンテキストクラスローダーを使用して ClassUtils.forName
を使用します。
className
- 解決するクラス名 ClassNotFoundExceptionSE
- クラス名が無効だった場合 @Nullable protected MethodSE findMatchingMethod()
null
getTargetClass()
, getTargetMethod()
, getArguments()
public MethodSE getPreparedMethod() throws IllegalStateExceptionSE
たとえば、戻り値の型を決定するために使用できます。
null
)IllegalStateExceptionSE
- 呼び出し側がまだ準備されていない場合 prepare()
, invoke()
public boolean isPrepared()
getPreparedMethod()
へのアクセスをすでに許可しているかどうかを返します。@Nullable public ObjectSE invoke() throws InvocationTargetExceptionSE, IllegalAccessExceptionSE
呼び出し元は、事前に準備されている必要があります。
null
InvocationTargetExceptionSE
- ターゲットメソッドが例外をスローした場合 IllegalAccessExceptionSE
- ターゲットメソッドにアクセスできなかった場合 prepare()
public static int getTypeDifferenceWeight(ClassSE<?>[] paramTypes, ObjectSE[] args)
型と引数の間のクラス階層の違いを表す重みを決定します。直接一致、つまり整数 → と入力します。クラス Integer の arg は、結果を増加させません - すべての直接一致は重み 0 を意味します。型 Object とクラス Integer の arg が一致すると、階層内のスーパークラス 2 ステップ(つまり Object)により、重みが 2 増加します。必要な型のオブジェクトにまだ一致する最後のもの。型 Number とクラス Integer は、それに応じて重みを 1 増やします。これは、スーパークラス 1 が階層をステップアップするため(つまり、Number)、必要な型 Number と一致しているためです。整数型の引数を使用すると、コンストラクター(整数)がコンストラクター(数値)よりも優先され、コンストラクター(数値)がコンストラクター(オブジェクト)よりも優先されます。すべての引数の重みが累積されます。
メモ: これは、MethodInvoker 自体で使用されるアルゴリズムであり、Spring の Bean コンテナーでコンストラクターとファクトリメソッドを選択するために使用されるアルゴリズムです(通常の Bean 定義のデフォルトである寛大なコンストラクター解決の場合)。
paramTypes
- 一致するパラメーター型 args
- 一致する引数