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     *****************************************************************************/
009    package org.picocontainer.behaviors;
010    
011    import org.picocontainer.ComponentAdapter;
012    import org.picocontainer.PicoContainer;
013    import org.picocontainer.PicoCompositionException;
014    import org.picocontainer.behaviors.AbstractBehavior;
015    
016    import java.lang.reflect.Type;
017    
018    @SuppressWarnings("serial")
019    public class Decorated<T> extends AbstractBehavior<T> {
020        private final Decorator decorator;
021    
022    
023        public Decorated(ComponentAdapter<T> delegate, Decorator decorator) {
024            super(delegate);
025            this.decorator = decorator;
026        }
027    
028        public T getComponentInstance(final PicoContainer container, Type into)
029                throws PicoCompositionException {
030            T instance = super.getComponentInstance(container, into);
031            decorator.decorate(instance);
032            return instance;
033        }
034    
035    
036        public String getDescriptor() {
037            return "FieldDecorated";
038        }
039    
040        interface Decorator {
041    
042            void decorate(Object instance);
043    
044    
045        }
046    
047    }