|
PicoContainer example source code file (AdaptiveInjectionFactory.java)
The PicoContainer AdaptiveInjectionFactory.java source code
/*****************************************************************************
* Copyright (c) PicoContainer Organization. All rights reserved. *
* ------------------------------------------------------------------------- *
* The software in this package is published under the terms of the BSD *
* style license a copy of which has been included with this distribution in *
* the LICENSE.txt file. *
* *
* Idea by Rachel Davies, Original code by Aslak Hellesoy and Paul Hammant *
*****************************************************************************/
package org.picocontainer.injectors;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.ComponentMonitor;
import org.picocontainer.Parameter;
import org.picocontainer.PicoCompositionException;
import org.picocontainer.Characteristics;
import org.picocontainer.LifecycleStrategy;
import org.picocontainer.InjectionFactory;
import org.picocontainer.behaviors.AbstractBehaviorFactory;
import org.picocontainer.annotations.Inject;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Properties;
/**
* Creates instances Injectors, depending on whether the component is the presence of Annotations and characteristics.
*
* @author Paul Hammant
* @version $Revision: 3660 $
*/
public class AdaptiveInjectionFactory implements InjectionFactory, Serializable {
public ComponentAdapter createComponentAdapter(ComponentMonitor componentMonitor,
LifecycleStrategy lifecycleStrategy,
Properties componentProperties,
Object componentKey,
Class componentImplementation,
Parameter... parameters) throws PicoCompositionException {
ComponentAdapter componentAdapter = null;
componentAdapter = makeIfFieldAnnotationInjection(componentImplementation,
componentMonitor,
lifecycleStrategy,
componentProperties,
componentKey,
componentAdapter,
parameters);
if (componentAdapter != null) {
return componentAdapter;
}
componentAdapter = makeIfMethodAnnotationInjection(componentImplementation,
componentMonitor,
lifecycleStrategy,
componentProperties,
componentKey,
componentAdapter,
parameters);
if (componentAdapter != null) {
return componentAdapter;
}
componentAdapter = makeIfSetterInjection(componentProperties,
componentMonitor,
lifecycleStrategy,
componentKey,
componentImplementation,
componentAdapter,
parameters);
if (componentAdapter != null) {
return componentAdapter;
}
return makeDefaultInjection(componentProperties,
componentMonitor,
lifecycleStrategy,
componentKey,
componentImplementation,
parameters);
}
protected ComponentAdapter makeDefaultInjection(Properties componentProperties,
ComponentMonitor componentMonitor,
LifecycleStrategy lifecycleStrategy,
Object componentKey,
Class componentImplementation, Parameter... parameters)
{
AbstractBehaviorFactory.removePropertiesIfPresent(componentProperties, Characteristics.CDI);
return new ConstructorInjectionFactory().createComponentAdapter(componentMonitor,
lifecycleStrategy,
componentProperties,
componentKey,
componentImplementation,
parameters);
}
protected ComponentAdapter makeIfSetterInjection(Properties componentProperties,
ComponentMonitor componentMonitor,
LifecycleStrategy lifecycleStrategy,
Object componentKey,
Class componentImplementation,
ComponentAdapter componentAdapter,
Parameter... parameters)
{
if (AbstractBehaviorFactory.removePropertiesIfPresent(componentProperties, Characteristics.SDI)) {
componentAdapter = new SetterInjectionFactory().createComponentAdapter(componentMonitor,
lifecycleStrategy,
componentProperties,
componentKey,
componentImplementation,
parameters);
}
return componentAdapter;
}
protected ComponentAdapter makeIfMethodAnnotationInjection(Class componentImplementation,
ComponentMonitor componentMonitor,
LifecycleStrategy lifecycleStrategy,
Properties componentProperties,
Object componentKey,
ComponentAdapter componentAdapter,
Parameter... parameters)
{
if (isMethodAnnotationInjection(componentImplementation)) {
componentAdapter =
new MethodAnnotationInjectionFactory().createComponentAdapter(componentMonitor,
lifecycleStrategy,
componentProperties,
componentKey,
componentImplementation,
parameters);
}
return componentAdapter;
}
protected ComponentAdapter makeIfFieldAnnotationInjection(Class componentImplementation,
ComponentMonitor componentMonitor,
LifecycleStrategy lifecycleStrategy,
Properties componentProperties,
Object componentKey, ComponentAdapter componentAdapter, Parameter... parameters)
{
if (isFieldAnnotationInjection(componentImplementation)) {
componentAdapter =
new FieldAnnotationInjectionFactory().createComponentAdapter(componentMonitor,
lifecycleStrategy,
componentProperties,
componentKey,
componentImplementation,
parameters);
}
return componentAdapter;
}
protected boolean isMethodAnnotationInjection(Class componentImplementation) {
Method[] methods = componentImplementation.getDeclaredMethods();
for (Method method : methods) {
if (method.getAnnotation(Inject.class) != null) {
return true;
}
}
return false;
}
protected boolean isFieldAnnotationInjection(Class componentImplementation) {
Field[] fields = componentImplementation.getDeclaredFields();
for (Field field : fields) {
if (field.getAnnotation(Inject.class) != null) {
return true;
}
}
return false;
}
}
Other PicoContainer examples (source code examples)Here is a short list of links related to this PicoContainer AdaptiveInjectionFactory.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.