Example #1
0
 private function _injectConstructorArguments(BeanDefinition $bean)
 {
     if ($bean->isCreatedWithFactoryBean()) {
         $factoryMethod = $bean->getFactoryMethod();
         $factoryBean = $bean->getFactoryBean();
         $def = $this->_container->getBeanDefinition($factoryBean);
         $class = $def->getClass();
         $rMethod = $this->_reflectionFactory->getMethod($class, $factoryMethod);
         $annotations = $this->_reflectionFactory->getMethodAnnotations($class, $factoryMethod);
         $this->_applyToConstructor($rMethod, $annotations, $bean);
     } else {
         if ($bean->isCreatedByConstructor()) {
             $class = $bean->getClass();
             $rClass = $this->_reflectionFactory->getClass($class);
             $rMethod = $rClass->getConstructor();
             if ($rMethod) {
                 $annotations = $this->_reflectionFactory->getMethodAnnotations($class, $rMethod->getName());
                 $this->_applyToConstructor($rMethod, $annotations, $bean);
             }
         }
     }
 }
Example #2
0
 /**
  * (non-PHPdoc)
  * @see Ding\Bean\Lifecycle.IAfterDefinitionListener::afterDefinition()
  */
 public function afterDefinition(BeanDefinition $bean)
 {
     $properties = $bean->getProperties();
     $class = $bean->getClass();
     $rClass = $this->reflectionFactory->getClass($class);
     foreach ($rClass->getProperties() as $rProperty) {
         $propertyName = $rProperty->getName();
         $annotations = $this->reflectionFactory->getPropertyAnnotations($class, $propertyName);
         if ($annotations->contains('value')) {
             $annotation = $annotations->getSingleAnnotation('value');
             if ($annotation->hasOption('value')) {
                 $value = $annotation->getOptionSingleValue('value');
                 $properties[$propertyName] = new BeanPropertyDefinition($propertyName, BeanPropertyDefinition::PROPERTY_SIMPLE, $value);
             }
         }
     }
     $bean->setProperties($properties);
     if ($bean->isCreatedWithFactoryBean()) {
         $factoryMethod = $bean->getFactoryMethod();
         $factoryBean = $bean->getFactoryBean();
         $def = $this->_container->getBeanDefinition($factoryBean);
         $annotations = $this->reflectionFactory->getMethodAnnotations($def->getClass(), $factoryMethod);
         $this->_applyToConstructor($annotations, $bean);
     } else {
         if ($bean->isCreatedByConstructor()) {
             $class = $bean->getClass();
             $rClass = $this->reflectionFactory->getClass($bean->getClass());
             $rMethod = $rClass->getConstructor();
             if ($rMethod) {
                 $annotations = $this->reflectionFactory->getMethodAnnotations($class, $rMethod->getName());
                 $this->_applyToConstructor($annotations, $bean);
             }
         }
     }
     return $bean;
 }
Example #3
0
 /**
  * Instantiates a bean using a factory bean.
  *
  * @param BeanDefinition $definition
  *
  * @return object
  */
 private function _instantiateByFactoryBean(BeanDefinition $definition)
 {
     $factoryBean = $this->getBean($definition->getFactoryBean());
     $refObject = new \ReflectionObject($factoryBean);
     $factoryMethod = $refObject->getMethod($definition->getFactoryMethod());
     $args = $this->_sortArgsWithNames($definition, $factoryMethod);
     return $factoryMethod->invokeArgs($factoryBean, $args);
 }