[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.