Example #1
0
 public function weave()
 {
     $aClassLoader = ClassLoader::singleton();
     $arrBeWeavedClasses = array();
     $aCompiler = null;
     foreach ($this->jointPointIterator() as $aJointPoint) {
         $sBeWeavedClass = $aJointPoint->weaveClass();
         if (!in_array($sBeWeavedClass, $arrBeWeavedClasses)) {
             $sSrcClassFile = $aClassLoader->searchClass($sBeWeavedClass, Package::nocompiled);
             $sCmpdClassFile = $aClassLoader->searchClass($sBeWeavedClass, Package::compiled);
             if (!$sSrcClassFile) {
                 throw new Exception("AOP 无法将目标代码织入到 JointPoint %s 中:没有找到类 %s 的源文件。", array($aJointPoint->{$sBeWeavedClass}, $aJointPoint->name()));
             }
             if (!$sCmpdClassFile) {
                 throw new Exception("AOP 无法将目标代码织入到 JointPoint %s 中:没有找到类 %s 的编译文件。", array($aJointPoint->{$sBeWeavedClass}, $aJointPoint->name()));
             }
             if (!$aCompiler) {
                 $aCompiler = $this->createClassCompiler();
             }
             $aCompiler->compile(File::createInstance($sSrcClassFile)->openReader(), File::createInstance($sCmpdClassFile)->openWriter());
             $arrBeWeavedClasses[] = $sBeWeavedClass;
         }
     }
 }