2

我有一个执行 Groovy 脚本的 Spring Controlled Grovoy Script Executor 类。

像下面的东西

    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注入脚本?通过自动装配,或者让 Spring 创建类,了解当脚本发生变化时需要重新创建类?

如果该类是类路径的一部分并使用 java 构建,则可以使用 Autowire,但是此脚本内容在运行时已过去,因此对于 spring 来说不是静态的。

4

1 回答 1

1

您需要一个 的实例AutowireCapableBeanFactory,您可以通过将您的类声明为 a 来获得该实例BeanFactoryAware,然后您可以调用方法autowireBean(existingBean)

例如:

class MyBeanCreator implements BeanFactoryAware {

  private AutowireCapableBeanFactory beanFactory; //you need to add setter as well

  def foobar() {
    //your existing code....
    final GroovyObject groovyObject = (GroovyObject) this.groovyClass.newInstance();

    //Wire with Spring 
    beanFactory.autowireBean(groovyObject);

    //rest of your existing code...
  }

}

另见:http ://static.springsource.org/spring/docs/3.0.x/api/org/springframework/beans/factory/config/AutowireCapableBeanFactory.html

于 2013-02-20T05:08:34.043 回答