public boolean containsDependent(Contextual<?> contextual, Object instance) { if (dependentObjects == null) { return false; } synchronized (this) { for (DependentCreationalContext<?> dependentCreationalContext: dependentObjects) { if (dependentCreationalContext.getContextual().equals(contextual) && dependentCreationalContext.getInstance() == instance) { return true; } } return false; } }
/** * Adds given dependent instance to the map. * * @param dependent dependent contextual * @param instance dependent instance */ public <K> void addDependent(Contextual<K> dependent, Object instance) { if(instance != null) { DependentCreationalContext<K> dependentCreational = new DependentCreationalContext<>(dependent); dependentCreational.setInstance(instance); synchronized(this) { if (dependentObjects == null) { dependentObjects = new ArrayList<>(); } if (dependent == bean) { dependentObjects.add(0, dependentCreational); } else { dependentObjects.add(dependentCreational); } } } }
if (createdDependents != null) { for (final DependentCreationalContext<?> dcc : createdDependents) { if (clazz.isInstance(dcc.getInstance())) { // is that enough? do we have more to match? preInstantiated = dcc.getInstance(); break;
public <X> void destroyDependent(X instance) { if (dependentObjects == null) { return; } synchronized (this) { for (Iterator<DependentCreationalContext<?>> i = dependentObjects.iterator(); i.hasNext();) { DependentCreationalContext<?> dependentContext = i.next(); if (dependentContext.getInstance() == instance) { Contextual<X> dependentContextual = (Contextual<X>)dependentContext.getContextual(); CreationalContext<X> creationalContext = (CreationalContext<X>)this; dependentContextual.destroy(instance, creationalContext); if (dependentObjects != null) { i.remove(); } // else previous destroy removed it break; } } } }
dependent.getContextual().destroy((T) dependent.getInstance(), this); maxRemoval--;