001package org.picocontainer.injectors; 002 003import org.picocontainer.ComponentAdapter; 004import org.picocontainer.ComponentMonitor; 005import org.picocontainer.ComponentMonitorStrategy; 006import org.picocontainer.InjectionFactory; 007import org.picocontainer.Injector; 008import org.picocontainer.LifecycleStrategy; 009import org.picocontainer.PicoCompositionException; 010import org.picocontainer.PicoContainer; 011import org.picocontainer.PicoVisitor; 012import org.picocontainer.lifecycle.NullLifecycleStrategy; 013 014import java.io.Serializable; 015import java.lang.reflect.Type; 016 017public abstract class AbstractInjectionFactory implements InjectionFactory, Serializable { 018 019 public void verify(PicoContainer container) { 020 } 021 022 public final void accept(PicoVisitor visitor) { 023 visitor.visitComponentFactory(this); 024 } 025 026 protected ComponentAdapter wrapLifeCycle(final Injector injector, LifecycleStrategy lifecycleStrategy) { 027 if (lifecycleStrategy instanceof NullLifecycleStrategy) { 028 return injector; 029 } else { 030 return new LifecycleAdapter(injector, lifecycleStrategy); 031 } 032 } 033 034 private static class LifecycleAdapter implements Injector, LifecycleStrategy, ComponentMonitorStrategy, Serializable { 035 private final Injector delegate; 036 private final LifecycleStrategy lifecycleStrategy; 037 038 public LifecycleAdapter(Injector delegate, LifecycleStrategy lifecycleStrategy) { 039 this.delegate = delegate; 040 this.lifecycleStrategy = lifecycleStrategy; 041 } 042 043 public Object getComponentKey() { 044 return delegate.getComponentKey(); 045 } 046 047 public Class getComponentImplementation() { 048 return delegate.getComponentImplementation(); 049 } 050 051 public Object getComponentInstance(PicoContainer container) throws PicoCompositionException { 052 return delegate.getComponentInstance(container); 053 } 054 055 public Object getComponentInstance(PicoContainer container, Type into) throws PicoCompositionException { 056 return delegate.getComponentInstance(container, into); 057 } 058 059 public void verify(PicoContainer container) throws PicoCompositionException { 060 delegate.verify(container); 061 } 062 063 public void accept(PicoVisitor visitor) { 064 delegate.accept(visitor); 065 } 066 067 public ComponentAdapter getDelegate() { 068 return delegate; 069 } 070 071 public ComponentAdapter findAdapterOfType(Class adapterType) { 072 return delegate.findAdapterOfType(adapterType); 073 } 074 075 public String getDescriptor() { 076 return "LifecycleAdapter"; 077 } 078 079 public String toString() { 080 return getDescriptor() + ":" + delegate.toString(); 081 } 082 083 public void start(Object component) { 084 lifecycleStrategy.start(component); 085 } 086 087 public void stop(Object component) { 088 lifecycleStrategy.stop(component); 089 } 090 091 public void dispose(Object component) { 092 lifecycleStrategy.dispose(component); 093 } 094 095 public boolean hasLifecycle(Class<?> type) { 096 return lifecycleStrategy.hasLifecycle(type); 097 } 098 099 public boolean isLazy(ComponentAdapter<?> adapter) { 100 return lifecycleStrategy.isLazy(adapter); 101 } 102 103 public void changeMonitor(ComponentMonitor monitor) { 104 if (delegate instanceof ComponentMonitorStrategy) { 105 ((ComponentMonitorStrategy) delegate).changeMonitor(monitor); 106 } 107 } 108 109 public ComponentMonitor currentMonitor() { 110 if (delegate instanceof ComponentMonitorStrategy) { 111 return ((ComponentMonitorStrategy) delegate).currentMonitor(); 112 } 113 return null; 114 } 115 116 public Object decorateComponentInstance(PicoContainer container, Type into, Object instance) { 117 return delegate.decorateComponentInstance(container, into, instance); 118 } 119 } 120}