Each time you use addComponent(..) on PicoContainer, behind the scenes a ComponentAdapter instance is set up. There is one ComponentAdapter implementation per component instance. The ComponentAdapters can be added to a container directly, or made by the ComponentFactory the container is using. Both for BehaviorFactory and InjectionFactory implementations. Its all kinda hidden from you to make PicoContainer's API appear simple.
Some examples :
public class MyAdapter extends AbstractAdapter {
private QuantumEntanglement qe = new QuantumEntanglementImpl.class
public MyAdapter() {
super(QuantumEntanglement.class, QuantumEntanglementImpl.class);
}
public Object getComponent(PicoContainer pico) {
Auditor a = pico.getComponent(Auditor.class);
a.audit("QE used", new Date());
return qe;
}
public void verify(PicoContainer container) {
}
}
...
pico = new DefaultPicoContainer();
pico.addAdapter(new MyAdapter());
QuantumEntanglement e = pico.getComponent(QuantumEntanglement.class);