private function generateClassInfo($sClassName) { $aClassLoader = ClassLoader::singleton(); $sFilePath = $aClassLoader->searchClass($sClassName, Package::nocompiled); if (empty($sFilePath)) { return array(); } $aFile = new File($sFilePath); $aInheritInfoDetector = InheritInfoDetector::singleton(); $arrClassInfo = $aInheritInfoDetector->detect($aFile->openReader()); return $arrClassInfo; }
public function createClassLoader() { $aClassLoader = new ClassLoader(); $aFolder = Folder::singleton(); // 将 jecat 加入到 class loader 中 $aClassLoader->addPackage('org\\jecat\\framework', \org\jecat\framework\CLASSPATH); // 将保存 数据表 实现类的临时目录加入到 class loader 中 $aPackage = new ShadowClassPackage(Prototype::MODEL_IMPLEMENT_CLASS_BASE, Prototype::MODEL_IMPLEMENT_CLASS_NS, $aFolder->findFolder('/data/class/db/model', Folder::FIND_AUTO_CREATE)); $aClassLoader->addPackage($aPackage); // 将保存 数据表原型 实现类的临时目录加入到 class loader 中 $aPackage = new ShadowClassPackage(Prototype::PROTOTYPE_IMPLEMENT_CLASS_BASE, Prototype::PROTOTYPE_IMPLEMENT_CLASS_NS, $aFolder->findFolder('/data/class/db/prototype', Folder::FIND_AUTO_CREATE)); $aClassLoader->addPackage($aPackage); return $aClassLoader; }
private function parseAspectClass($sAspectClass) { if (!($sClassFile = ClassLoader::singleton()->searchClass($sAspectClass, Package::nocompiled))) { throw new Exception("注册到AOP中的Aspace(%s)不存在; Aspace必须是一个有效的类", $sAspectClass); } $aClassCompiler = CompilerFactory::singleton()->create(); $aTokenPool = $aClassCompiler->scan($sClassFile); $aClassCompiler->interpret($aTokenPool); if (!($aClassToken = $aTokenPool->findClass($sAspectClass))) { throw new Exception("根据 class path 搜索到class的定义文件:%s,但是该文件中没有定义:%s", array($sAspectClass, $sClassFile, $sAspectClass)); } $this->aspects()->add(Aspect::createFromToken($aClassToken, $sClassFile)); }