[picocontainer-scm] [5676] java/2.x/trunk/pico/container/src/test/org/picocontainer: Allow PicoBuilder to be used more than once after it is defined.
rimovm-yCVjj/[email protected]
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision 5676
Author rimovm
Date 2010-04-14 18:47:17 -0500 (Wed, 14 Apr 2010)
Log Message
Allow PicoBuilder to be used more than once after it is defined. Useful in pooling situations.
Modified Paths
- java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java
Diff
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java (5675 => 5676)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java 2010-04-14 23:46:01 UTC (rev 5675)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java 2010-04-14 23:47:17 UTC (rev 5676)
@@ -176,8 +176,10 @@
} else {
componentFactory = new CompositeInjection(injectors.toArray(new InjectionFactory[injectors.size()]));
}
- while (!behaviors.empty()) {
- componentFactory = buildComponentFactory(tempContainer, componentFactory);
+
+ Stack<Object> clonedBehaviors = (Stack< Object >) behaviors.clone();
+ while (!clonedBehaviors.empty()) {
+ componentFactory = buildComponentFactory(tempContainer, componentFactory, clonedBehaviors);
}
tempContainer.addComponent(ComponentFactory.class, componentFactory);
@@ -222,8 +224,9 @@
}
}
- private ComponentFactory buildComponentFactory(DefaultPicoContainer container, final ComponentFactory lastCaf) {
- Object componentFactory = behaviors.pop();
+ private ComponentFactory buildComponentFactory(DefaultPicoContainer container, final ComponentFactory lastCaf, final Stack<Object> clonedBehaviors) {
+
+ Object componentFactory = clonedBehaviors.pop();
DefaultPicoContainer tmpContainer = new TransientPicoContainer(container);
tmpContainer.addComponent("componentFactory", componentFactory);
if (lastCaf != null) {
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java (5675 => 5676)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java 2010-04-14 23:46:01 UTC (rev 5675)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java 2010-04-14 23:47:17 UTC (rev 5676)
@@ -9,6 +9,10 @@
*****************************************************************************/
package org.picocontainer;
+import org.picocontainer.behaviors.Cached;
+
+import java.util.Map;
+
import com.thoughtworks.xstream.XStream;
import org.junit.Before;
import org.junit.Test;
@@ -39,6 +43,7 @@
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import static org.picocontainer.behaviors.Behaviors.caching;
import static org.picocontainer.behaviors.Behaviors.implementationHiding;
@@ -328,6 +333,21 @@
Object expected = new TestPicoContainer(ai, ncm, lifecycle, parent);
assertEquals(toXml(expected), toXml(actual));
}
+
+ @Test
+ public void testMultipleUsesAreSupported() {
+ PicoBuilder picoBuilder = new PicoBuilder().withCaching().withLifecycle();
+ MutablePicoContainer pico = picoBuilder.build();
+
+ pico.addComponent(Map.class, HashMap.class);
+ assertNotNull(pico.getComponentAdapter(Map.class).findAdapterOfType(Cached.class));
+
+ pico = picoBuilder.build();
+ pico.addComponent(Map.class, HashMap.class);
+ assertNotNull(pico.getComponentAdapter(Map.class).findAdapterOfType(Cached.class));
+
+
+ }
public static class TestPicoContainer extends DefaultPicoContainer {
----------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email