/** * advisor를 추가한다. * * @param Advisor $advisor 추가하려는 advisor * @param null $relation 추가하려는 advisor의 before, after 관계에 있는 advisor 목록. 아래와 같은 형식이 될 수 있다. * ``` * ['before'=>'advisor1', 'after'=>['advisor2','advisor3']] * ``` * * @return void */ public function put(Advisor $advisor, $relation = null) { $name = $advisor->getName(); $pointCutStrList = $advisor->getPointCut(); // add advisor if (array_key_exists($name, $this->advisorArr)) { throw new AdvisorNameAlreadyExistsException(['name' => $name]); } $this->advisorArr[$name] = $advisor; foreach ($pointCutStrList as $pointCutStr) { list($class, $method) = explode('@', $pointCutStr); if (isset($this->aliases[$class])) { //$pointCutStr = $this->aliases[$class].'@'.$method; $class = $this->aliases[$class]; } $box = $this->getPointCutBox($class, $method); $box->advisorArr[] = $name; } // add relation $added = false; if (isset($relation['before']) && $relation['before'] !== null) { $this->sorter->add($name, Sorter::BEFORE, $relation['before']); $added = true; } if (isset($relation['after']) && $relation['after'] !== null) { $this->sorter->add($name, Sorter::AFTER, $relation['after']); $added = true; } if (!$added) { $this->sorter->add($name); } }
/** * @depends testCreate * */ public function testSetPointCut(Advisor $advisor) { $advisor->setPointCut('TargetClass@originMethod2'); $this->assertEquals(['TargetClass@originMethod2'], $advisor->getPointCut()); }