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.injectors;
010    
011    import org.picocontainer.Parameter;
012    import org.picocontainer.ComponentMonitor;
013    import org.picocontainer.LifecycleStrategy;
014    import org.picocontainer.annotations.Inject;
015    
016    /** @author Paul Hammant */
017    @SuppressWarnings("serial")
018    public class MultiInjector extends CompositeInjector {
019    
020        private AnnotatedMethodInjector annotatedMethodInjector;
021    
022        public MultiInjector(Object componentKey,
023                             Class componentImplementation,
024                             Parameter[] parameters,
025                             ComponentMonitor componentMonitor, LifecycleStrategy lifecycleStrategy, String setterPrefix, boolean useNames) {
026            super(componentKey, componentImplementation, parameters, componentMonitor, lifecycleStrategy, useNames,
027                    new ConstructorInjector(componentKey, componentImplementation, parameters, componentMonitor, lifecycleStrategy, useNames),
028                    new SetterInjector(componentKey, componentImplementation, parameters, componentMonitor, lifecycleStrategy, setterPrefix, useNames),
029                    new AnnotatedMethodInjector(componentKey, componentImplementation, parameters, componentMonitor, lifecycleStrategy, Inject.class, useNames),
030                    new AnnotatedFieldInjector(componentKey, componentImplementation, parameters, componentMonitor, lifecycleStrategy, Inject.class, useNames));
031    
032        }
033    
034        public String getDescriptor() {
035            return "MultiInjector";
036        }
037    }