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