1 10 11 package org.picocontainer.gems.adapters; 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 55 public class ThreadLocalComponentAdapterFactory extends DecoratingComponentAdapterFactory { 56 57 61 public static final boolean ENSURE_THREAD_LOCALITY = true; 62 66 public static final boolean THREAD_ENSURES_LOCALITY = false; 67 68 private final boolean ensureThreadLocal; 69 private ProxyFactory proxyFactory; 70 71 76 public ThreadLocalComponentAdapterFactory(final ComponentAdapterFactory delegate) { 77 this(delegate, new StandardProxyFactory()); 78 } 79 80 85 public ThreadLocalComponentAdapterFactory(final ComponentAdapterFactory delegate, final ProxyFactory proxyFactory) { 86 this(delegate, ENSURE_THREAD_LOCALITY, proxyFactory); 87 } 88 89 94 public ThreadLocalComponentAdapterFactory(final ComponentAdapterFactory delegate, final boolean ensure) { 95 this(delegate, ensure, new StandardProxyFactory()); 96 } 97 98 104 protected ThreadLocalComponentAdapterFactory( 105 final ComponentAdapterFactory delegate, final boolean ensure, final ProxyFactory factory) { 106 super(delegate); 107 ensureThreadLocal = ensure; 108 proxyFactory = factory; 109 } 110 111 public ComponentAdapter createComponentAdapter( 112 Object componentKey, Class componentImplementation, Parameter[] parameters) 113 throws PicoIntrospectionException, AssignabilityRegistrationException, NotConcreteRegistrationException { 114 final ComponentAdapter componentAdapter; 115 if (ensureThreadLocal) { 116 componentAdapter = new ThreadLocalComponentAdapter(super.createComponentAdapter( 117 componentKey, componentImplementation, parameters), proxyFactory); 118 } else { 119 componentAdapter = new CachingComponentAdapter(super.createComponentAdapter( 120 componentKey, componentImplementation, parameters), new ThreadLocalReference()); 121 } 122 return componentAdapter; 123 } 124 125 } 126 | Popular Tags |