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 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 { 057 if (removePropertiesIfPresent(componentProperties, Characteristics.NO_CACHE)) { 058 return super.addComponentAdapter(componentMonitor, lifecycleStrategy, componentProperties, adapter); 059 } 060 removePropertiesIfPresent(componentProperties, Characteristics.CACHE); 061 return new ThreadCached<T>(super.addComponentAdapter(componentMonitor, 062 lifecycleStrategy, 063 componentProperties, 064 adapter)); 065 } 066 }