001    package org.picocontainer.behaviors;
002    
003    import org.picocontainer.ComponentAdapter;
004    import org.picocontainer.PicoContainer;
005    import org.picocontainer.PicoCompositionException;
006    import org.picocontainer.behaviors.AbstractBehavior;
007    
008    import java.lang.reflect.Type;
009    
010    @SuppressWarnings("serial")
011    public class Decorated extends AbstractBehavior {
012        private final Decorator decorator;
013    
014    
015        public Decorated(ComponentAdapter delegate, Decorator decorator) {
016            super(delegate);
017            this.decorator = decorator;
018        }
019    
020        public Object getComponentInstance(final PicoContainer container, Type into)
021                throws PicoCompositionException {
022            Object instance = super.getComponentInstance(container, into);
023            decorator.decorate(instance);
024            return instance;
025        }
026    
027    
028        public String getDescriptor() {
029            return "FieldDecorated";
030        }
031    
032        public interface Decorator {
033    
034            void decorate(Object instance);
035    
036    
037        }
038    
039    }