Sorry, I failed to mention a _really_ important detail, the step in question is a child of a partitioner.
There appear to be two step contexts. One parent step context (the step controlling the partitioner) and a second step context, which is a child thread started/tasked by the partitioner. The child steps are launched individually and in parallel by the partitioner. When applying job parameters declaratively using the expression "#{jobParameters}", the map that's passed to each tasklet (again partitioned and in parallel) is the map initialized with the properties of the first partitioned tasklet. So, it seems the "step" scoped bean is stored in the parent step context but initialized with the properties of the first child step. I would have expected a bean solely in the parent step context without the granularity of the child step context--or, a bean initialized with the child step properties but not an incorrect combination of both.
So, I assume there's no way to inject a child step with properties that are scoped for the respective partitioned step? In other words, where each partitioned step is supplied declaratively with a bean associated with its partition.
Code:
<b:job id="job">
<b:step id="step" parent="abstractStep">
<b:partition step="stepDelegate"
partitioner="partitioner">
<b:handler grid-size="10" task-executor="taskExecutor" />
</b:partition>
</b:step>
</b:job>
<bean id="partitioner" class="Partitioner" scope="step">
<property name="jobParametersMap" value="#{jobParameters}" />
</bean>
<b:step id="stepDelegate">
<b:tasklet ref="tasklet" />
</b:step>
<bean id="tasklet" class="Tasklet" scope="step">
<property name="parametersBean" ref="parametersBean" />
</bean>
<bean id="parametersBean" class="ParametersBean" scope="step">
<constructor-arg value="#{jobParameters}" />
</bean>