GroovyShell的初始化过程

GroovyShell的初始化public GroovyShell(CompilerConfiguration config) {this(new Binding(), config);}class Binding is subclass of GroovyObjectSupportpublic GroovyObjectSupport() {this.metaClass = InvokerHelper.getMetaClass(this.getClass());}while the InvokerHelper has static memberspublic static final MetaClassRegistry metaRegistry = GroovySystem.getMetaClassRegistry();So the GroovySystem will be loaded, and its static membersstatic {USE_REFLECTION = true;META_CLASS_REGISTRY = new MetaClassRegistryImpl();}public MetaClassRegistryImpl() {this(LOAD_DEFAULT, true);}it will call MetaClassRegistryImpl.registerMethods, -> GeneratedMetaMethod.DgmMethodRecord.loadDgmInfo();the function will analysis groovy-2.4.0.jar$META-INF/dgminfo这是一个二进制流的文件,,她定义了很多基本的函数的参数个数,类型,返回值的类型等等这个函数最后返回一个列表,记录了所欧的基本函数registerMethods(null, true, true, map);返回后, map是一个CachedClass为key (如java.util.Calendar)list<MetaMethod> 为value的map 如[org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy@a5852[name: clearTime params: [] returns: class java.util.Calendar owner: class java.util.Calendar],..]接着和DefaultGroovyMethods.additionals 合并, 不断填充map接着和class org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods 合并 (所有函数为 [public static java.lang.StringBuilder org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.leftShift(java.lang.StringBuilder,java.lang.Object), public static java.lang.Object org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.next(java.lang.Enum), public static java.lang.String org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.plus(java.lang.StringBuilder,java.lang.String), public static java.lang.Object org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.previous(java.lang.Enum), public static void org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.putAt(java.lang.StringBuilder,groovy.lang.EmptyRange,java.lang.Object), public static void org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.putAt(java.lang.StringBuilder,groovy.lang.IntRange,java.lang.Object), public static int org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods.size(java.lang.StringBuilder)])注意leftShift接着DefaultGroovyStaticMethods接着ExtensionModuleScanner scanner = new ExtensionModuleScanner(new DefaultModuleListener(map), this.getClass().getClassLoader());scanner.scanClasspathModules();从所有META-INF/services/org.codehaus.groovy.runtime.ExtensionModule 中找出properties,处理 ---------具体略以后分析从 groovy-jsr223-<version>.jar中,找出[public static java.lang.Object org.codehaus.groovy.jsr223.ScriptExtensions.eval(javax.script.ScriptEngine,java.io.Reader,groovy.lang.Binding) throws javax.script.ScriptException, public static java.lang.Object org.codehaus.groovy.jsr223.ScriptExtensions.eval(javax.script.ScriptEngine,java.lang.String,groovy.lang.Binding) throws javax.script.ScriptException, public static javax.script.ScriptEngine org.codehaus.groovy.jsr223.ScriptStaticExtensions.$static_propertyMissing(javax.script.ScriptEngineManager,java.lang.String)]以上过程也在同时不断写MetaClassRegistryImpl类的private FastArray instanceMethods = new FastArray();private FastArray staticMethods = new FastArray();

人生难免有挫折,但你是逃避不了的,一定要去面对它

GroovyShell的初始化过程

相关文章:

你感兴趣的文章:

标签云: