Spring框架中按名称执行的动态方法

Spring框架中按名称执行的动态方法,spring,Spring,有几个注入服务,还有一个Rest服务。Rest服务以字符串形式访问服务名称和方法名称,然后调用方法。 有什么解决办法吗 REST(methodName:String)->按名称查找方法,然后调用它您需要在这里使用反射 使用字符串服务名称从spring上下文获取bean实例。使用这个bean实例定位要执行的方法。请参见下面的示例代码和参考 Object t = appContext.getBean("nameOfService"); // fetch the bean instance

有几个注入服务,还有一个Rest服务。Rest服务以字符串形式访问服务名称和方法名称,然后调用方法。 有什么解决办法吗


REST(methodName:String)->按名称查找方法,然后调用它

您需要在这里使用反射

使用字符串服务名称从spring上下文获取bean实例。使用这个bean实例定位要执行的方法。请参见下面的示例代码和参考

    Object t = appContext.getBean("nameOfService"); // fetch the bean instance
    Class<?> c = appContext.getType("nameOfService"); // determine type i.e. Class

    Method[] allMethods = c.getDeclaredMethods();
    for (Method m : allMethods) {
        String mname = m.getName();
        if (!mname.startsWith("nameOfMethod")) {
            continue;
        }
        try {
            m.setAccessible(true);
            Object o = m.invoke(t, args[1], args[2], args[3]);
        } catch (InvocationTargetException x) {
            Throwable cause = x.getCause();
            err.format("invocation of %s failed: %s%n",
               mname, cause.getMessage());
        }
    }
Object t=appContext.getBean(“服务名称”);//获取bean实例
类c=appContext.getType(“服务名称”);//确定类型,即类别
方法[]allMethods=c.getDeclaredMethods();
对于(方法m:所有方法){
字符串mname=m.getName();
如果(!mname.startsWith(“nameOfMethod”)){
继续;
}
试一试{
m、 setAccessible(true);
对象o=m.invoke(t,args[1],args[2],args[3]);
}捕获(调用TargetException x){
可丢弃原因=x.getCause();
错误格式(“调用%s失败:%s%n”,
mname,cause.getMessage());
}
}

p.S.:我还没试过,但这应该行得通。如果有任何问题,请在评论中告知。

您尝试过任何方法吗?没有,我一直在用谷歌搜索可能的解决方案。确实如此。。但鉴于目前的情况,必须这样做。