private function _build($adviceClass) { $this->advice = $advice = new $adviceClass(); if (isset(self::$reflectionCache[$adviceClass])) { $reflection = self::$reflectionCache[$adviceClass]; } else { $reflection = new Sabel_Reflection_Class($advice); self::$reflectionCache[$adviceClass] = $reflection; } $annotatedAdvisor = $reflection->getAnnotation("advisor"); if ($annotatedAdvisor !== null) { $this->advisorClass = $annotatedAdvisor[0][0]; } $annotatedInterceptor = $reflection->getAnnotation("interceptor"); if ($annotatedInterceptor !== null) { $this->interceptorClass = $annotatedInterceptor[0][0]; } $annotatedClass = $reflection->getAnnotation("classMatch"); if ($annotatedClass !== null) { $this->annotatedClass = $annotatedClass[0][0]; } foreach ($reflection->getMethods() as $method) { $this->addToAdvisor($method, $advice); } }
public function build($weaverClass, $targetClass, $adviceClasses) { $this->weaver = new $weaverClass($targetClass); if (!is_array($adviceClasses)) { $adviceClasses = array($adviceClasses); } $adviceClasses = array_reverse($adviceClasses); foreach ($adviceClasses as $adviceClass) { $advice = new $adviceClass(); $this->advice = $advice; $reflection = new Sabel_Reflection_Class($advice); $annotatedAdvisor = $reflection->getAnnotation("advisor"); if ($annotatedAdvisor !== null) { $this->advisorClass = $annotatedAdvisor[0][0]; } $annotatedInterceptor = $reflection->getAnnotation("interceptor"); if ($annotatedInterceptor !== null) { $this->interceptorClass = $annotatedInterceptor[0][0]; } $annotatedClass = $reflection->getAnnotation("classMatch"); if ($annotatedClass !== null) { $this->annotatedClass = $annotatedClass[0][0]; } foreach ($reflection->getMethods() as $method) { $this->addToAdvisor($method); } } return $this->weaver; }
public function getProxy() { if ($this->target === null) { throw new Sabel_Exception_Runtime("must be set target class"); } if (!is_object($this->target)) { if (class_exists($this->target)) { $this->target = new $this->target(); } } $adviced = new Sabel_Aspect_Adviced(); $reflection = new Sabel_Reflection_Class($this->target); foreach ($this->advisor as $advisor) { if (!$advisor instanceof Sabel_Aspect_Advisor) { throw new Sabel_Exception_Runtime("advisor must be implements Sabel_Aspect_Advisor"); } $pointcut = $advisor->getPointcut(); if (!$pointcut instanceof Sabel_Aspect_Pointcut) { throw new Sabel_Exception_Runtime("pointcut must be Sabel_Aspect_Pointcut"); } $pointcuts = new Sabel_Aspect_DefaultPointcuts(); foreach ($reflection->getMethods() as $method) { if ($pointcuts->matches($pointcut, $method->getName(), $this->target)) { $adviced->addAdvices($method->getName(), $advisor->getAdvice()); } } } if ($adviced->hasAdvices()) { $proxy = new Sabel_Aspect_Proxy_Static($this->target); $proxy->__setAdviced($adviced); return $proxy; } else { // no match found. return a raw target object. return $this->target; } }