001 /***************************************************************************** 002 * Copyright (c) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 * * 008 * Idea by Rachel Davies, Original code by Aslak Hellesoy and Paul Hammant * 009 *****************************************************************************/ 010 011 package org.picocontainer.behaviors; 012 013 import org.picocontainer.Characteristics; 014 import org.picocontainer.ComponentAdapter; 015 import org.picocontainer.ComponentMonitor; 016 import org.picocontainer.LifecycleStrategy; 017 import org.picocontainer.Parameter; 018 import org.picocontainer.PicoCompositionException; 019 020 import java.util.Properties; 021 022 /** @author Paul Hammant */ 023 @SuppressWarnings("serial") 024 public class ThreadCaching extends AbstractBehaviorFactory { 025 026 public <T> ComponentAdapter<T> createComponentAdapter(ComponentMonitor componentMonitor, 027 LifecycleStrategy lifecycleStrategy, 028 Properties componentProperties, 029 Object componentKey, 030 Class<T> componentImplementation, 031 Parameter... parameters) 032 throws PicoCompositionException 033 { 034 if (removePropertiesIfPresent(componentProperties, Characteristics.NO_CACHE)) { 035 return super.createComponentAdapter(componentMonitor, 036 lifecycleStrategy, 037 componentProperties, 038 componentKey, 039 componentImplementation, 040 parameters); 041 } 042 removePropertiesIfPresent(componentProperties, Characteristics.CACHE); 043 return componentMonitor.newBehavior(new ThreadCached<T>(super.createComponentAdapter(componentMonitor, 044 lifecycleStrategy, 045 componentProperties, 046 componentKey, 047 componentImplementation, 048 parameters))); 049 050 } 051 052 public <T> ComponentAdapter<T> addComponentAdapter(ComponentMonitor componentMonitor, 053 LifecycleStrategy lifecycleStrategy, 054 Properties componentProperties, 055 ComponentAdapter<T> adapter) { 056 if (removePropertiesIfPresent(componentProperties, Characteristics.NO_CACHE)) { 057 return super.addComponentAdapter(componentMonitor, lifecycleStrategy, componentProperties, adapter); 058 } 059 removePropertiesIfPresent(componentProperties, Characteristics.CACHE); 060 return componentMonitor.newBehavior(new ThreadCached<T>(super.addComponentAdapter(componentMonitor, 061 lifecycleStrategy, 062 componentProperties, 063 adapter))); 064 } 065 }