@SuppressWarnings("unchecked") private <T> BeanInstanceBag<T> createContextualBag(Contextual<T> contextual, CreationalContext<T> creationalContext) { BeanInstanceBag<T> bag = new BeanInstanceBag<>(creationalContext); if(componentInstanceMap instanceof ConcurrentMap) { BeanInstanceBag<?> existingBag = ((ConcurrentMap<Contextual<?>, BeanInstanceBag<?>>) componentInstanceMap).putIfAbsent(contextual, bag); if (existingBag != null) { bag = (BeanInstanceBag<T>) existingBag; } } else { componentInstanceMap.put(contextual, bag); } return bag; }
/** * Internal destroy method. */ public void destroyInstance(Contextual<?> contextual) { BeanInstanceBag<?> instance = componentInstanceMap.get(contextual); if (instance == null) { // just exit if people manually invoke destroy after the bean already got ditched return; } //Get creational context CreationalContext<Object> cc = (CreationalContext<Object>)instance.getBeanCreationalContext(); //Destroy instance Object beanInstance = instance.getBeanInstance(); if (beanInstance != null) { destroyInstance((Contextual<Object>)contextual, beanInstance, cc); } }
instance = bag.getBeanInstance(); if (instance != null) instance = bag.create(contextual);
/** * {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public <T> T get(Contextual<T> component) { checkActive(); BeanInstanceBag bag = componentInstanceMap.get(component); if(bag != null) { return (T) bag.getBeanInstance(); } return null; }