1 10 11 package org.picocontainer.gems; 12 13 import com.thoughtworks.proxy.ProxyFactory; 14 import com.thoughtworks.proxy.factory.StandardProxyFactory; 15 16 import org.picocontainer.ComponentAdapter; 17 import org.picocontainer.Parameter; 18 import org.picocontainer.PicoIntrospectionException; 19 import org.picocontainer.defaults.AssignabilityRegistrationException; 20 import org.picocontainer.defaults.CachingComponentAdapter; 21 import org.picocontainer.defaults.ComponentAdapterFactory; 22 import org.picocontainer.defaults.DecoratingComponentAdapterFactory; 23 import org.picocontainer.defaults.NotConcreteRegistrationException; 24 25 26 61 public class ThreadLocalComponentAdapterFactory extends DecoratingComponentAdapterFactory { 62 63 68 public static final boolean ENSURE_THREAD_LOCALITY = true; 69 73 public static final boolean THREAD_ENSURES_LOCALITY = false; 74 75 private final boolean ensureThreadLocal; 76 private ProxyFactory proxyFactory; 77 78 84 public ThreadLocalComponentAdapterFactory(final ComponentAdapterFactory delegate) { 85 this(delegate, new StandardProxyFactory()); 86 } 87 88 95 public ThreadLocalComponentAdapterFactory(final ComponentAdapterFactory delegate, final ProxyFactory proxyFactory) { 96 this(delegate, ENSURE_THREAD_LOCALITY, proxyFactory); 97 } 98 99 105 public ThreadLocalComponentAdapterFactory(final ComponentAdapterFactory delegate, final boolean ensure) { 106 this(delegate, ensure, new StandardProxyFactory()); 107 } 108 109 116 protected ThreadLocalComponentAdapterFactory( 117 final ComponentAdapterFactory delegate, final boolean ensure, final ProxyFactory factory) { 118 super(delegate); 119 ensureThreadLocal = ensure; 120 proxyFactory = factory; 121 } 122 123 129 public ComponentAdapter createComponentAdapter(Object componentKey, Class componentImplementation, Parameter[] parameters) 130 throws PicoIntrospectionException, AssignabilityRegistrationException, NotConcreteRegistrationException { 131 final ComponentAdapter componentAdapter; 132 if (ensureThreadLocal) { 133 componentAdapter = new ThreadLocalComponentAdapter(super.createComponentAdapter( 134 componentKey, componentImplementation, parameters), proxyFactory); 135 } else { 136 componentAdapter = new CachingComponentAdapter(super.createComponentAdapter( 137 componentKey, componentImplementation, parameters), new ThreadLocalReference()); 138 } 139 return componentAdapter; 140 } 141 142 } 143
| Popular Tags
|