У меня есть Spring Controlled Grovoy Script Executor, который выполняет Groovy Script.Spring Inject/AutoWire Класс Groovy, созданный во время выполнения
что-то вроде ниже
final ClassLoader parent = getClass().getClassLoader();
final GroovyClassLoader loader;
loader = AccessController.doPrivileged(new PrivilegedAction<GroovyClassLoader>() {
@Override
public GroovyClassLoader run() {
return new GroovyClassLoader(parent);
}
});
this.groovyClass = loader.parseClass(" def returnSomthing() { return SpringControlledBean.action('Hello World') } ");
final GroovyObject groovyObject = (GroovyObject) this.groovyClass.newInstance();
final Object[] args = { };
final Object result = groovyObject.invokeMethod("returnSomthing", args);
Можно ли вводить SpringControlledBean в сценарию? через, может быть, autwire, или получить Spring, чтобы создать понимание класса, что класс должен быть воссоздан по мере изменения сценария?
Autowire возможен, если класс был частью пути к классам и построен с помощью java, но содержимое этого скрипта прошло во время выполнения, поэтому не статично для весны.
Это работает для Groovy класса, но для простого заводного сценария (с четкостью функций), она не работает. Autowired должен быть полем или Method/Constructor. Может быть, есть возможность изменить созданный файл класса groovy. – Ben
Да, для простого сценария нет ничего. вы можете обернуть его всеми необходимыми материалами перед подключением/выполнением, например –