/** * Create (or get for Session / Singleton beanRepository) the instance of the bean * * @param BeanEnvelope $beanStructure * * @return Object * * @throws OvoContainerException */ public function initializeBean(BeanEnvelope $beanStructure) { $this->logger->debug('Create Object from Core: ' . $beanStructure->getClass()); $beanInstance = $this->getScopeObjectCreator($beanStructure->getScope())->createBean($beanStructure); if (!is_object($beanInstance)) { $this->logger->error('Error in the creation of the bean with name ' . $beanStructure->getName()); throw new OvoContainerException('Error in bean creation ' . $beanStructure->getName()); } return $beanInstance; }
/** * Resolve dependency for bean $beanStructure * * @param BeanEnvelope $beanEnvelope * * @return void */ public static function resolve(BeanEnvelope $beanEnvelope) { self::$logger = OvoLogger::getLogger(get_class()); self::$logger->debug('Get dependencies form bean ' . $beanEnvelope->getClass()); $beanInstance = $beanEnvelope->getInstance(); $dependencies = $beanEnvelope->getProperties(); if ($dependencies) { foreach ($dependencies as $dependency) { self::injectPropertyDependency($dependency, $beanInstance, $beanEnvelope->getContextReferenceId()); } } }
/** * Create the object from the $beanStructure * * @param BeanEnvelope $beanEnvelope * * @return Object */ protected function createObject(BeanEnvelope $beanEnvelope) { $beanClass = $beanEnvelope->getClass(); $beanArgs = $beanEnvelope->getArgs(); $beanFactoryMethod = $beanEnvelope->getFactoryMethod(); $this->logger->debug('Create bean name: ' . $beanEnvelope->getName() . ' on class: ' . $beanClass); if ($beanFactoryMethod != null) { $beanInstance = ObjectCreator::createObjectFromFactoryMethod($beanClass, $beanArgs, $beanFactoryMethod); } else { $beanInstance = ObjectCreator::createObject($beanClass, $beanArgs); } return $beanInstance; }
/** * Create (or get for Session / Singleton bean) the bean instance * * @param BeanEnvelope $beanEnvelope * * @return Object */ private function getBeanFromFactory(BeanEnvelope $beanEnvelope) { $this->logger->debug('Create or get bean' . $beanEnvelope->getClass() . ' from the Factory'); try { $instance = $this->factoryObjectCreator->initializeBean($beanEnvelope); if ($beanEnvelope->getScope() == ScopeValue::SESSION) { $this->handleSessionBean($beanEnvelope); } return $instance; } catch (OvoContainerException $e) { throw new OvoInternalException($e->getMessage(), $beanEnvelope); } }