public Object getComponentInstance(Object componentKey) { ComponentAdapter componentAdapter = getComponentAdapter(componentKey); if (componentAdapter != null) { return getInstance(componentAdapter); } else { return null; } }
public Object getComponentInstanceOfType(Class componentType) { final ComponentAdapter componentAdapter = getComponentAdapterOfType(componentType); return componentAdapter == null ? null : getInstance(componentAdapter); }
public ComponentAdapter unregisterComponentByInstance(Object componentInstance) { Collection componentAdapters = getComponentAdapters(); for (Iterator iterator = componentAdapters.iterator(); iterator.hasNext();) { ComponentAdapter componentAdapter = (ComponentAdapter) iterator.next(); if (getInstance(componentAdapter).equals(componentInstance)) { return unregisterComponent(componentAdapter.getComponentKey()); } } return null; }
public List getComponentInstancesOfType(Class componentType) { if (componentType == null) { return Collections.EMPTY_LIST; } Map adapterToInstanceMap = new HashMap(); for (Iterator iterator = componentAdapters.iterator(); iterator.hasNext();) { ComponentAdapter componentAdapter = (ComponentAdapter) iterator.next(); if (componentType.isAssignableFrom(componentAdapter.getComponentImplementation())) { Object componentInstance = getInstance(componentAdapter); adapterToInstanceMap.put(componentAdapter, componentInstance); // This is to ensure all are added. (Indirect dependencies will be added // from InstantiatingComponentAdapter). addOrderedComponentAdapter(componentAdapter); } } List result = new ArrayList(); for (Iterator iterator = orderedComponentAdapters.iterator(); iterator.hasNext();) { Object componentAdapter = iterator.next(); final Object componentInstance = adapterToInstanceMap.get(componentAdapter); if (componentInstance != null) { // may be null in the case of the "implicit" adapter // representing "this". result.add(componentInstance); } } return result; }
DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent(ThreadPool.class, DefaultThreadPool.class); pico.addComponent(MyComp.class, MyComp.class); MyComp myComp = (MyComp)pico.getInstance(MyComp.class);