请问大佬们,往数据库表里某个字段存一小段java代码(例如一段if,else),然后后台查到该字段值后再继续运行该逻辑,这个可行不?

解决方案 »

  1.   

    java的运行前需要先编译成字节码,然而再由jvm 解释成二进制才能执行,那么前提是字节码,而数据库中存的是原码,估计是不能
      

  2.   

    用spring 里面的spel表达式可以解决这个问题吗哥?
      

  3.   

    用spring 里面的spel表达式可以解决这个问题吗哥?
    简单的应该可以,复杂的还是老老实实用规则引擎吧
      

  4.   

    哈哈,脑洞很大啊
    不过存java代码不行,如果你会写js代码,就可以,java里面有个js代码解析器,可以解析并执行js代码
    其实如果是很简答的代码,js和java语法差不多,如下public static void main(String[] args) throws Exception {
            ScriptEngine scriptEngine= MANAGER.getEngineByName("js");
            scriptEngine.put("a",2);
            scriptEngine.put("b",2);
            System.out.println(scriptEngine.eval("if(a=1){b-100}else{5}"));    }
      

  5.   

    漏了一行代码private final static ScriptEngineManager MANAGER = new ScriptEngineManager();
      

  6.   

    肯定可以啊,就是把字符串动态编译成class文件,再动态执行都行(以前看到某篇文章写过)。或者也可以参考jsp的那一套。规则引擎这东西基本上也不用自己写,直接调用工具包。你可以百度一下jexl
      

  7.   

    用于jython,groovy等虚拟机语言即可规则引擎太庞大,而且不自由
      

  8.   

    嗯嗯,没有那么多这方面的业现在务,只是想对交易上送报文和返回报文中的某些值作一定的转换。那你直接用java代码写一个通用的转换方法就能实现,没必要搞那么复杂。
      

  9.   

    嗯嗯,没有那么多这方面的业现在务,只是想对交易上送报文和返回报文中的某些值作一定的转换。那你直接用java代码写一个通用的转换方法就能实现,没必要搞那么复杂。
    嗯,但是需要定几种规则,1.直接替换新值,2.将旧值进行简单计算,然后转换成新值......等等。
      

  10.   

    groovy或者dlr 了解下
      

  11.   

    12楼正解
    我觉得楼主的状况应该是逻辑变化比较频繁,但是逻辑本身比较简单。
    这种情况比较适合使用脚本语言。
    常见的方案是用js或者lua
      

  12.   

    第一次见这种需求,可以试下,在查询出来之后,拼接字符串。通过io操作生产.java文件。再获取编译器。通过filemanager获取文件管理系统。将.java编译成.class文件。在通过classforname或者loaderclass动态加载.class。再通过反射获取里面的方法。通过invoke调用里面的方法。执行。