Invoker.java
package pro.verron.officestamper.core;
import org.springframework.expression.MethodExecutor;
import java.lang.reflect.Method;
import java.util.List;
import static java.util.Arrays.asList;
/**
* Represents an invoker that encapsulates the name, arguments, and executor of a method
* to be invoked.
* It acts as a wrapper to facilitate method invocation with specific parameters,
* and a dedicated execution strategy.
*/
public record Invoker(String name, Invokers.Args args, MethodExecutor executor) {
/**
* Constructs an {@code Invoker} instance by extracting the method name, parameter types,
* and creating a corresponding {@link ReflectionExecutor} for the provided object and method.
*
* @param obj the object on which the method will be invoked.
* @param method the method to be invoked, including its name and parameter types.
*/
public Invoker(Object obj, Method method) {
this(method.getName(), asList(method.getParameterTypes()), new ReflectionExecutor(obj, method));
}
/**
* Constructs an {@code Invoker} instance using the provided method name, argument types, and executor.
*
* @param name the name of the method to be invoked.
* @param args the list of argument types required for the method invocation.
* @param executor the executor responsible for executing the method.
*/
public Invoker(String name, List<Class<?>> args, MethodExecutor executor) {
this(name, new Invokers.Args(args), executor);
}
}