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