[picocontainer-scm] [5573] java/2.x/trunk/pico/container/src/java/org/picocontainer: provided instances can have life cycle too, if cached of course
paul-yCVjj/[email protected]
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision 5573
Author paul
Date 2010-01-25 13:15:33 -0600 (Mon, 25 Jan 2010)
Log Message
provided instances can have life cycle too, if cached of course
Modified Paths
- java/2.x/trunk/pico/container/src/java/org/picocontainer/ComponentMonitor.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/Injector.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/behaviors/AbstractBehavior.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Provider.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ProviderAdapter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/security/CustomPermissionsURLClassLoader.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/CachedTestCase.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/ProviderTestCase.java
Diff
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/ComponentMonitor.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/ComponentMonitor.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/ComponentMonitor.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -122,7 +122,7 @@
RuntimeException cause);
/**
- * No Component has been found for the key in question. Implementors of this have a last chance opportunity to
+ * No Component has been found for the key in question. Implementers of this have a last chance opportunity to
* specify something for the need. This is only relevant to component dependencies, and not to
* container.getComponent(<key>) in your user code.
*
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/Injector.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/Injector.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/Injector.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -11,7 +11,7 @@
import java.lang.reflect.Type;
/**
- * Implementors are responsible for instantiating and injecting dependancies into
+ * Implementers are responsible for instantiating and injecting dependancies into
* Constructors, Methods and Fields.
*/
public interface Injector<T> extends ComponentAdapter<T> {
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/behaviors/AbstractBehavior.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/behaviors/AbstractBehavior.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/behaviors/AbstractBehavior.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -44,7 +44,6 @@
protected final ComponentAdapter<T> delegate;
-
public AbstractBehavior(ComponentAdapter<T> delegate) {
this.delegate = delegate;
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -32,7 +32,6 @@
@SuppressWarnings("serial")
public class AnnotatedFieldInjector extends IterativeInjector {
-
private final Class<? extends Annotation> injectionAnnotation;
public AnnotatedFieldInjector(Object key,
@@ -81,14 +80,13 @@
}
private Field[] getFields(final Class clazz) {
- return (Field[]) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ return AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
+ public Field[] run() {
return clazz.getDeclaredFields();
}
});
}
-
protected Object injectIntoMember(AccessibleObject member, Object componentInstance, Object toInject)
throws IllegalAccessException, InvocationTargetException {
Field field = (Field) member;
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -59,7 +59,7 @@
}
protected Constructor getConstructor() {
- Object retVal = AccessController.doPrivileged(new PrivilegedAction() {
+ Object retVal = AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
try {
return getComponentImplementation().getConstructor((Class[])null);
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -79,8 +79,8 @@
}
private Field[] getFields() {
- return (Field[]) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ return AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
+ public Field[] run() {
return getComponentImplementation().getDeclaredFields();
}
});
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Provider.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Provider.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/Provider.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -11,7 +11,7 @@
/**
* Providers are a type of Injector that can participate in Injection via a custom method.
*
- * Implementors of this class must implement a single method called provide. That method must return
+ * Implementers of this class must implement a single method called provide. That method must return
* the component type intended to be provided. The method can accept parameters that PicoContainer
* will satisfy.
*/
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ProviderAdapter.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ProviderAdapter.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ProviderAdapter.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -8,30 +8,28 @@
*****************************************************************************/
package org.picocontainer.injectors;
-import org.picocontainer.Characteristics;
-import org.picocontainer.ComponentAdapter;
-import org.picocontainer.PicoCompositionException;
-import org.picocontainer.PicoContainer;
-import org.picocontainer.PicoVisitor;
+import org.picocontainer.*;
+import org.picocontainer.behaviors.Cached;
+import org.picocontainer.lifecycle.NullLifecycleStrategy;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Properties;
-
/**
* Providers are a type of Injector that can participate in Injection via a custom method.
*
- * Implementors of this class must implement a single method called provide. That method must return
+ * Implementers of this class must implement a single method called provide. That method must return
* the component type intended to be provided. The method can accept parameters that PicoContainer
* will satisfy.
*/
-public class ProviderAdapter implements org.picocontainer.Injector, Provider {
+public class ProviderAdapter implements org.picocontainer.Injector, Provider, LifecycleStrategy {
private final Object provider;
private final Method provideMethod;
private final Class key;
private Properties properties;
+ private LifecycleStrategy lifecycleStrategy;
protected ProviderAdapter() {
provider = this;
@@ -40,17 +38,27 @@
setUseNames(useNames());
}
+ public ProviderAdapter(LifecycleStrategy lifecycleStrategy, Object provider) {
+ this(lifecycleStrategy, provider, false);
+ }
+
public ProviderAdapter(Object provider) {
- this(provider, false);
+ this(new NullLifecycleStrategy(), provider, false);
}
public ProviderAdapter(Object provider, boolean useNames) {
+ this(new NullLifecycleStrategy(), provider, useNames);
+ }
+
+ public ProviderAdapter(LifecycleStrategy lifecycleStrategy, Object provider, boolean useNames) {
+ this.lifecycleStrategy = lifecycleStrategy;
this.provider = provider;
provideMethod = getProvideMethod(provider.getClass());
key = provideMethod.getReturnType();
setUseNames(useNames);
}
+
private void setUseNames(boolean b) {
if (b) {
properties = Characteristics.USE_NAMES;
@@ -123,6 +131,27 @@
}
public String getDescriptor() {
- return "AbstractProvider";
+ return "ProviderAdapter";
}
+
+ public void start(Object component) {
+ lifecycleStrategy.start(component);
+ }
+
+ public void stop(Object component) {
+ lifecycleStrategy.stop(component);
+ }
+
+ public void dispose(Object component) {
+ lifecycleStrategy.dispose(component);
+ }
+
+
+ public boolean hasLifecycle(Class<?> type) {
+ return lifecycleStrategy.hasLifecycle(type);
+ }
+
+ public boolean isLazy(ComponentAdapter<?> adapter) {
+ return lifecycleStrategy.isLazy(adapter);
+ }
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -82,8 +82,8 @@
}
private Field[] getFields() {
- return (Field[]) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ return AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
+ public Field[] run() {
return getComponentImplementation().getDeclaredFields();
}
});
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/security/CustomPermissionsURLClassLoader.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/security/CustomPermissionsURLClassLoader.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/security/CustomPermissionsURLClassLoader.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -61,8 +61,8 @@
while (classLoader != null) {
sb.append(classLoader.toString()).append("\n");
final ClassLoader cl = classLoader;
- classLoader = (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
+ classLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+ public ClassLoader run() {
return cl.getParent();
}
});
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/CachedTestCase.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/CachedTestCase.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/behaviors/CachedTestCase.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -20,6 +20,10 @@
import org.jmock.integration.junit4.JMock;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.picocontainer.containers.EmptyPicoContainer;
+import org.picocontainer.injectors.ConstructorInjection;
+import org.picocontainer.lifecycle.StartableLifecycleStrategy;
+import org.picocontainer.monitors.NullComponentMonitor;
import org.picocontainer.testmodel.SimpleTouchable;
import org.picocontainer.testmodel.Touchable;
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/ProviderTestCase.java (5572 => 5573)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/ProviderTestCase.java 2010-01-02 13:36:38 UTC (rev 5572)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/ProviderTestCase.java 2010-01-25 19:15:33 UTC (rev 5573)
@@ -13,9 +13,12 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import org.picocontainer.DefaultPicoContainer;
-import org.picocontainer.PicoCompositionException;
+
+import org.picocontainer.*;
import org.picocontainer.annotations.Nullable;
+import org.picocontainer.behaviors.ThreadCaching;
+import org.picocontainer.lifecycle.ReflectionLifecycleStrategy;
+import org.picocontainer.monitors.LifecycleComponentMonitor;
public class ProviderTestCase {
@@ -255,5 +258,79 @@
}
}
+ @Test
+ public void providersCanHaveLifecyclesToo() {
+ ComponentMonitor componentMonitor = new LifecycleComponentMonitor();
+ LifecycleStrategy lifecycleStrategy = new
+ ReflectionLifecycleStrategy(componentMonitor);
+ MutablePicoContainer pico = new DefaultPicoContainer(new
+ ThreadCaching(), lifecycleStrategy, null);
+
+ StringBuilder sb = new StringBuilder();
+ pico.addComponent(Configuration.class);
+ pico.addAdapter(new ProviderAdapter(lifecycleStrategy, new ComponentProvider(sb)));
+ Object foo = pico.getComponent(Component.class);
+ pico.start();
+ pico.stop();
+ assertEquals("@<>", sb.toString());
+
+ }
+
+ public class ComponentProvider implements Provider {
+ private StringBuilder sb;
+
+ public ComponentProvider(StringBuilder sb) {
+ this.sb = sb;
+ }
+
+ public Component provide(Configuration config) {
+ return new ComponentImpl(sb, config.getHost(), config.getPort());
+ }
+ }
+
+ public static class Configuration {
+
+ public String getHost() {
+ return "hello";
+ }
+
+ public int getPort() {
+ return 99;
+ }
+
+ public void start() {
+ }
+
+ public void stop() {
+ }
+
+ }
+
+ public static interface Component {
+
+ public void start();
+
+ public void stop();
+
+ }
+
+ public static class ComponentImpl implements Component {
+
+ private StringBuilder sb;
+
+ public ComponentImpl(StringBuilder sb, String host, int port) {
+ this.sb = sb.append("@");
+ }
+
+ public void start() {
+ sb.append("<");
+ }
+ public void stop() {
+ sb.append(">");
+ }
+
+ }
+
+
}
----------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email