springframework的ReflectionUtils反射工具类功能举例
import com.shein.dms.common.BasicCase; import com.shein.dms.utils.MathUtils; import com.shein.dms.utils.TimeUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; import org.testng.annotations.Test; import java.lang.reflect.Method; /** * @author :gongxr * @description:测试反射工具类 */ @Slf4j public class TestReflectionUtils extends BasicCase { /** * 指定无参方法反射执行 * 步骤:找方法、实例化、反射执行 */ @Test public void testFindMethod() throws Exception { Class<TimeUtils> clazz = TimeUtils.class; Method method = ReflectionUtils.findMethod(clazz, "getDateTimeNow"); Assert.notNull(method, "method方法对象不能为null"); ReflectionUtils.makeAccessible(method); log.info("方法名称:{},参数个数:{}", method.getName(), method.getParameterCount()); TimeUtils instance = TimeUtils.class.newInstance(); Object o = ReflectionUtils.invokeMethod(method, instance); log.info("result:{}", o); } /** * 指定有参方法反射执行 * 步骤:找方法、实例化、反射执行 */ @Test public void testFindMethodParams() throws Exception { Class<TimeUtils> clazz = TimeUtils.class; Method method = ReflectionUtils.findMethod(clazz, "getDateTimePlusDays", int.class); Assert.notNull(method, "method方法对象不能为null"); ReflectionUtils.makeAccessible(method); TimeUtils instance = TimeUtils.class.newInstance(); Object o = ReflectionUtils.invokeMethod(method, instance, 1); log.info("方法名称:{},参数个数:{}", method.getName(), method.getParameterCount()); log.info("result:{}", o); } /** * 反射调用方法,方法遍历 * 步骤:找方法、实例化、反射执行 */ @Test public void testFindMethods() throws Exception { Class<MathUtils> clazz = MathUtils.class; Method[] declaredMethods = clazz.getDeclaredMethods(); Assert.notEmpty(declaredMethods, "declaredMethods方法对象不能为null"); for (Method method : declaredMethods) { ReflectionUtils.makeAccessible(method); MathUtils instance = MathUtils.class.newInstance(); Object o = ReflectionUtils.invokeMethod(method, instance, 11); log.info("方法名称:{},参数个数:{},结果:{}", method.getName(), method.getParameterCount(), o); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架