[picocontainer-scm] [5611] java/2.x/trunk/pico/distribution/src/site/content: builder can do implict composite injection too
paul-yCVjj/[email protected]
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision 5611
Author paul
Date 2010-02-15 07:52:20 -0600 (Mon, 15 Feb 2010)
Log Message
builder can do implict composite injection too
Modified Paths
- java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedMethodInjection.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjection.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java
- java/2.x/trunk/pico/distribution/src/site/content/news.html
Diff
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java (5610 => 5611)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java 2010-02-13 01:00:02 UTC (rev 5610)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/PicoBuilder.java 2010-02-15 13:52:20 UTC (rev 5611)
@@ -15,6 +15,7 @@
import org.picocontainer.behaviors.Synchronizing;
import org.picocontainer.containers.EmptyPicoContainer;
import org.picocontainer.containers.TransientPicoContainer;
+import org.picocontainer.injectors.CompositeInjection;
import org.picocontainer.injectors.MethodInjection;
import org.picocontainer.lifecycle.JavaEE5LifecycleStrategy;
import org.picocontainer.lifecycle.NullLifecycleStrategy;
@@ -56,14 +57,18 @@
private List<Object> containerComps = new ArrayList<Object>();
private boolean addChildToParent;
private LifecycleStrategy lifecycleStrategy;
- private final Stack<Object> componentFactories = new Stack<Object>();
- private InjectionFactory injectionType;
+ private final Stack<Object> behaviors = new Stack<Object>();
+ private final List<InjectionFactory> injectors = new ArrayList<InjectionFactory>();
private Class<? extends ComponentMonitor> componentMonitorClass = NullComponentMonitor.class;
private Class<? extends LifecycleStrategy> lifecycleStrategyClass = NullLifecycleStrategy.class;
public PicoBuilder(PicoContainer parentContainer, InjectionFactory injectionType) {
- this.injectionType = injectionType;
+ this(parentContainer);
+ injectors.add(injectionType);
+ }
+
+ public PicoBuilder(PicoContainer parentContainer) {
if (parentContainer != null) {
this.parentContainer = parentContainer;
} else {
@@ -71,16 +76,12 @@
}
}
- public PicoBuilder(PicoContainer parentContainer) {
- this(parentContainer, adaptiveDI());
- }
-
public PicoBuilder(InjectionFactory injectionType) {
this(new EmptyPicoContainer(), injectionType);
}
public PicoBuilder() {
- this(new EmptyPicoContainer(), adaptiveDI());
+ this(new EmptyPicoContainer());
}
public PicoBuilder withLifecycle() {
@@ -139,12 +140,19 @@
addContainerComponents(tempContainer);
- ComponentFactory lastCaf = injectionType;
- while (!componentFactories.empty()) {
- lastCaf = buildComponentFactory(tempContainer, lastCaf);
+ ComponentFactory componentFactory;
+ if (injectors.size() == 1) {
+ componentFactory = injectors.get(0);
+ } else if (injectors.size() == 0) {
+ componentFactory = adaptiveDI();
+ } else {
+ componentFactory = new CompositeInjection(injectors.toArray(new InjectionFactory[injectors.size()]));
}
+ while (!behaviors.empty()) {
+ componentFactory = buildComponentFactory(tempContainer, componentFactory);
+ }
- tempContainer.addComponent(ComponentFactory.class, lastCaf);
+ tempContainer.addComponent(ComponentFactory.class, componentFactory);
buildComponentMonitor(tempContainer);
@@ -187,7 +195,7 @@
}
private ComponentFactory buildComponentFactory(DefaultPicoContainer container, final ComponentFactory lastCaf) {
- Object componentFactory = componentFactories.pop();
+ Object componentFactory = behaviors.pop();
DefaultPicoContainer tmpContainer = new TransientPicoContainer(container);
tmpContainer.addComponent("componentFactory", componentFactory);
if (lastCaf != null) {
@@ -201,44 +209,44 @@
}
public PicoBuilder withHiddenImplementations() {
- componentFactories.push(implementationHiding());
+ behaviors.push(implementationHiding());
return this;
}
public PicoBuilder withSetterInjection() {
- injectionType = SDI();
+ injectors.add(SDI());
return this;
}
public PicoBuilder withAnnotatedMethodInjection() {
- injectionType = annotatedMethodDI();
+ injectors.add(annotatedMethodDI());
return this;
}
public PicoBuilder withAnnotatedFieldInjection() {
- injectionType = annotatedFieldDI();
+ injectors.add(annotatedFieldDI());
return this;
}
public PicoBuilder withConstructorInjection() {
- injectionType = CDI();
+ injectors.add(CDI());
return this;
}
public PicoBuilder withNamedMethodInjection() {
- injectionType = namedMethod();
+ injectors.add(namedMethod());
return this;
}
public PicoBuilder withNamedFieldInjection() {
- injectionType = namedField();
+ injectors.add(namedField());
return this;
}
public PicoBuilder withCaching() {
- componentFactories.push(caching());
+ behaviors.push(caching());
return this;
}
@@ -246,23 +254,23 @@
if (componentFactory == null) {
throw new NullPointerException("CAF cannot be null");
}
- componentFactories.push(componentFactory);
+ behaviors.push(componentFactory);
return this;
}
public PicoBuilder withSynchronizing() {
- componentFactories.push(Synchronizing.class);
+ behaviors.push(new Synchronizing());
return this;
}
public PicoBuilder withLocking() {
- componentFactories.push(Locking.class);
+ behaviors.push(new Locking());
return this;
}
public PicoBuilder withBehaviors(BehaviorFactory... factories) {
- for (ComponentFactory componentFactory : factories) {
- componentFactories.push(componentFactory);
+ for (BehaviorFactory componentFactory : factories) {
+ behaviors.push(componentFactory);
}
return this;
}
@@ -279,7 +287,7 @@
}
public PicoBuilder withComponentFactory(Class<? extends ComponentFactory> componentFactoryClass) {
- componentFactories.push(componentFactoryClass);
+ behaviors.push(componentFactoryClass);
return this;
}
@@ -289,17 +297,17 @@
}
public PicoBuilder withPropertyApplier() {
- componentFactories.push(PropertyApplying.class);
+ behaviors.push(new PropertyApplying());
return this;
}
public PicoBuilder withAutomatic() {
- componentFactories.push(Automating.class);
+ behaviors.push(new Automating());
return this;
}
public PicoBuilder withMethodInjection() {
- componentFactories.push(new MethodInjection());
+ injectors.add(new MethodInjection());
return this;
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java (5610 => 5611)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java 2010-02-13 01:00:02 UTC (rev 5610)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Injector.java 2010-02-15 13:52:20 UTC (rev 5611)
@@ -189,7 +189,7 @@
* @param componentImplementation
* @param parameters
* @param monitor
- * @param setterMethodPrefix
+ * @param prefix
* @param useNames
* @return setter injector instance.
* @throws AbstractInjector.NotConcreteRegistrationException
@@ -199,8 +199,8 @@
final Class componentImplementation,
Parameter[] parameters,
ComponentMonitor monitor,
- String setterMethodPrefix, boolean useNames) throws AbstractInjector.NotConcreteRegistrationException {
- return monitor.newInjector(new SetterInjector(componentKey, componentImplementation, parameters, monitor, setterMethodPrefix, useNames));
+ String prefix, boolean useNames) throws AbstractInjector.NotConcreteRegistrationException {
+ return monitor.newInjector(new SetterInjector(componentKey, componentImplementation, parameters, monitor, prefix, useNames));
}
/**
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedMethodInjection.java (5610 => 5611)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedMethodInjection.java 2010-02-13 01:00:02 UTC (rev 5610)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedMethodInjection.java 2010-02-15 13:52:20 UTC (rev 5611)
@@ -13,8 +13,8 @@
private final String prefix;
private final boolean optional;
- public NamedMethodInjection(String setterMethodPrefix) {
- this(setterMethodPrefix, true);
+ public NamedMethodInjection(String prefix) {
+ this(prefix, true);
}
public NamedMethodInjection() {
@@ -25,8 +25,8 @@
this("set", optional);
}
- public NamedMethodInjection(String setterMethodPrefix, boolean optional) {
- this.prefix = setterMethodPrefix;
+ public NamedMethodInjection(String prefix, boolean optional) {
+ this.prefix = prefix;
this.optional = optional;
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjection.java (5610 => 5611)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjection.java 2010-02-13 01:00:02 UTC (rev 5610)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjection.java 2010-02-15 13:52:20 UTC (rev 5611)
@@ -10,12 +10,17 @@
package org.picocontainer.injectors;
+import org.picocontainer.Characteristics;
+import org.picocontainer.ComponentAdapter;
+import org.picocontainer.ComponentMonitor;
+import org.picocontainer.LifecycleStrategy;
+import org.picocontainer.Parameter;
+import org.picocontainer.PicoCompositionException;
+import org.picocontainer.behaviors.AbstractBehaviorFactory;
+
import java.util.Properties;
-import org.picocontainer.*;
-import org.picocontainer.behaviors.AbstractBehaviorFactory;
-
/**
* A {@link org.picocontainer.InjectionFactory} for JavaBeans.
* The factory creates {@link SetterInjector}.
@@ -25,10 +30,10 @@
@SuppressWarnings("serial")
public class SetterInjection extends AbstractInjectionFactory {
- private final String setterMethodPrefix;
+ private final String prefix;
- public SetterInjection(String setterMethodPrefix) {
- this.setterMethodPrefix = setterMethodPrefix;
+ public SetterInjection(String prefix) {
+ this.prefix = prefix;
}
public SetterInjection() {
@@ -54,7 +59,7 @@
public <T> ComponentAdapter<T> createComponentAdapter(ComponentMonitor monitor, LifecycleStrategy lifecycleStrategy, Properties componentProperties, Object componentKey, Class<T> componentImplementation, Parameter... parameters)
throws PicoCompositionException {
boolean useNames = AbstractBehaviorFactory.arePropertiesPresent(componentProperties, Characteristics.USE_NAMES, true);
- return wrapLifeCycle(monitor.newInjector(new SetterInjector(componentKey, componentImplementation, parameters, monitor, setterMethodPrefix, useNames)), lifecycleStrategy);
+ return wrapLifeCycle(monitor.newInjector(new SetterInjector(componentKey, componentImplementation, parameters, monitor, prefix, useNames)), lifecycleStrategy);
}
}
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java (5610 => 5611)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java 2010-02-13 01:00:02 UTC (rev 5610)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/PicoBuilderTestCase.java 2010-02-15 13:52:20 UTC (rev 5611)
@@ -21,6 +21,7 @@
import org.picocontainer.injectors.AdaptingInjection;
import org.picocontainer.injectors.AnnotatedFieldInjection;
import org.picocontainer.injectors.AnnotatedMethodInjection;
+import org.picocontainer.injectors.CompositeInjection;
import org.picocontainer.injectors.ConstructorInjection;
import org.picocontainer.injectors.NamedFieldInjection;
import org.picocontainer.injectors.NamedMethodInjection;
@@ -223,13 +224,21 @@
}
}
- @Test public void testWithSetterDI() {
+ @Test public void testWithSetterInjection() {
MutablePicoContainer actual = new PicoBuilder().withSetterInjection().build();
MutablePicoContainer expected = new DefaultPicoContainer(new SetterInjection(),
new NullLifecycleStrategy(), new EmptyPicoContainer(), new NullComponentMonitor());
assertEquals(xs.toXML(expected), xs.toXML(actual));
}
+ @Test public void testWithConstructorAndSetterInjectionMakesHiddenCompositeInjection() {
+ MutablePicoContainer actual = new PicoBuilder().withConstructorInjection().withSetterInjection().build();
+ MutablePicoContainer expected = new DefaultPicoContainer(
+ new CompositeInjection(new ConstructorInjection(), new SetterInjection()),
+ new NullLifecycleStrategy(), new EmptyPicoContainer(), new NullComponentMonitor());
+ assertEquals(xs.toXML(expected), xs.toXML(actual));
+ }
+
@Test public void testWithAnnotatedMethodDI() {
MutablePicoContainer actual = new PicoBuilder().withAnnotatedMethodInjection().build();
MutablePicoContainer expected = new DefaultPicoContainer(new AnnotatedMethodInjection(),
Modified: java/2.x/trunk/pico/distribution/src/site/content/news.html (5610 => 5611)
--- java/2.x/trunk/pico/distribution/src/site/content/news.html 2010-02-13 01:00:02 UTC (rev 5610)
+++ java/2.x/trunk/pico/distribution/src/site/content/news.html 2010-02-15 13:52:20 UTC (rev 5611)
@@ -6,7 +6,7 @@
</head>
<body>
- <p><strong>Feb 14, 2010 - PicoContainer 2.10 released (311K jar)</strong></p>
+ <p><strong>Feb 14, 2010 - PicoContainer 2.10 released (307K jar)</strong></p>
<p>New (since 2.9):</p>
<ul>
----------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email