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); } } } }
/** * (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; }
/** * 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); }