public void afterPropertiesSet() throws Exception { Assert.notNull(definitionLocator, "The flow definition locator is required"); // apply defaults executionAttributes = defaults.applyExecutionAttributes(executionAttributes); repositoryType = defaults.applyIfNecessary(repositoryType); // pass all available parameters to the hook methods so that they // can participate in the construction process // a factory for flow executions FlowExecutionFactory executionFactory = createFlowExecutionFactory(executionAttributes, executionListenerLoader); // a strategy to restore deserialized flow executions FlowExecutionStateRestorer executionStateRestorer = createFlowExecutionStateRestorer(definitionLocator, executionAttributes, executionListenerLoader); // a repository to store flow executions FlowExecutionRepository executionRepository = createExecutionRepository(repositoryType, executionStateRestorer, conversationManager); // combine all pieces of the puzzle to get an operational flow executor flowExecutor = createFlowExecutor(definitionLocator, executionFactory, executionRepository); }