Выполнение скрипта внутри метода с BeanShell
Вопрос
Я не совсем уверен, как я могу это объяснить, но здесь идет речь:
Я хочу иметь возможность " вставить " некоторые команды в части моего кода, которые будут загружены из внешних файлов. Чтобы проанализировать и выполнить эти команды, я, вероятно, должен использовать некоторые сценарии, такие как метод eval BeanShell. Проблема в том, что он, похоже, не распознает экземпляр / метод, внутри которого он находится. В качестве очень простого примера я хочу сделать что-то вроде
public void somethingHappens()
{
Foo foo = new Foo();
Interpreter i = new Interpreter();
i.eval("print(foo.getName());");
}
Возможно ли это? Должен ли я использовать другие инструменты сценариев?
Решение
Если вы используете 1.6, вы можете использовать встроенную поддержку JavaScript.
Руководство по программированию сценариев Java объясняет, как импортировать классы Java в ваш скрипт.
Пример кода 9 в этой статье объясняется, как пройти объекты в область действия скрипта.
Другие советы
Используя бобовую оболочку, вы можете попробовать это
package beanshell;
import bsh.EvalError;
import bsh.Interpreter;
public class DemoExample {
public static void main( String [] args ) throws EvalError {
Interpreter i = new bsh.Interpreter();
String usrIp = "if(\"abc\".equals(\"abc\")){"
+ "demoExmp.printValue(\"Rohit\");"
+ "}";
i.eval(""
+ "import beanshell.DemoExample;"
+ "DemoExample demoExmp = new beanshell.DemoExample();"
+ ""+usrIp);
}
public static void printValue(String strVal){
System.out.println("Printing Value "+strVal);
}
}