org.springframework.batch.integration.partition.BeanFactoryStepLocator.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.batch.integration.partition.BeanFactoryStepLocator.java

Source

package org.springframework.batch.integration.partition;

import java.util.Arrays;
import java.util.Collection;

import org.springframework.batch.core.Step;
import org.springframework.batch.core.step.StepLocator;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.util.Assert;

/**
 * A {@link StepLocator} implementation that just looks in its enclosing bean
 * factory for components of type {@link Step}.
 * 
 * @author Dave Syer
 * 
 */
public class BeanFactoryStepLocator implements StepLocator, BeanFactoryAware {

    private BeanFactory beanFactory;

    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    /**
     * Look up a bean with the provided name of type {@link Step}.
     * @see StepLocator#getStep(String)
     */
    public Step getStep(String stepName) {
        return beanFactory.getBean(stepName, Step.class);
    }

    /**
     * Look in the bean factory for all beans of type {@link Step}.
     * @throws IllegalStateException if the {@link BeanFactory} is not listable
     * @see StepLocator#getStepNames()
     */
    public Collection<String> getStepNames() {
        Assert.state(beanFactory instanceof ListableBeanFactory, "BeanFactory is not listable.");
        return Arrays.asList(((ListableBeanFactory) beanFactory).getBeanNamesForType(Step.class));
    }

}