我想将 GroovyConsole 嵌入到现有的 Java 应用程序中,用于设计原型和调试目的。
我真的很希望这个控制台能够访问我的整个程序——这主要意味着任何单例或工厂都应该返回实际对象,而不是仅仅为 GroovyConsole 的世界创建一个新对象。
有什么办法可以做到这一点,还是我必须使用 setVariable() 调用一个一个地手动传递所有对象?
我想将 GroovyConsole 嵌入到现有的 Java 应用程序中,用于设计原型和调试目的。
我真的很希望这个控制台能够访问我的整个程序——这主要意味着任何单例或工厂都应该返回实际对象,而不是仅仅为 GroovyConsole 的世界创建一个新对象。
有什么办法可以做到这一点,还是我必须使用 setVariable() 调用一个一个地手动传递所有对象?
这实际上非常容易。最有可能的是,您可以使用无参数构造函数创建一个新控制台,它会按照您的要求进行操作。如果您的应用程序使用多个类加载器,只需在创建控制台实例时传入您想要的一个:
def cl = ... //which ClassLoader you'll need depends on your application
def console = new Console(cl)
console.run()
这将创建一个新的 Groovy 控制台并告诉它使用您想要的任何类加载器。这不会设置任何绑定或变量,但它确保控制台正在使用的类与应用程序的其余部分完全相同。如果您没有对应用程序中的类加载器做任何特别的事情,对 new Console() 的简单调用将导致它使用当前的类加载器作为父类加载器。