Need help getting example to work

I have a question and few issues
Question: how does the bpmn references a class
i see this line in the bpmn:
<bpmn2:serviceTask id="ServiceTask_1" camunda:delegateExpression="${calculateInterestService}" name="Calculate Interest">

but i dont understand what would create this calculateInterestService bean? Im not an expert on spring so maybe I’m missing something. But there is no reference to it in app context nor does the LoanApplicationContext create any such bean that i see.

Issues:
Currently Im trying to follow this tutorial at the end I get this error

11:26:53.380 [main] INFO org.camunda.bpm.engine - ENGINE-00001 Process Engine camunda_engine created.
11:26:56.554 [main] ERROR org.camunda.bpm.engine.context - ENGINE-16004 Exception while closing command context: ENGINE-02033 Delegate Expression ‘${calculateInterestService}’ did neither resolve to an implementation of ‘interface org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior’ nor ‘interface org.camunda.bpm.engine.delegate.JavaDelegate’.
org.camunda.bpm.engine.ProcessEngineException: ENGINE-02033 Delegate Expression ‘${calculateInterestService}’ did neither resolve to an implementation of ‘interface org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior’ nor ‘interface org.camunda.bpm.engine.delegate.JavaDelegate’.

but as far as i can see it does implement JavaDelegate

public class CalculateInterestService implements JavaDelegate {
	public void execute(DelegateExecution delegate) throws Exception {
		System.out.println("Spring Bean invoked.");
	}
}

Side note
I tried to just download the source and run it from the last step page in that tutorial but i get a different error:

May 18, 2020 12:09:22 PM org.springframework.web.context.ContextLoader initWebApplicationContext
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [org.camunda.bpm.getstarted.loanapproval.LoanApplicationContext]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on class org.camunda.bpm.getstarted.loanapproval.LoanApplicationContext

@owengerig Annotation is missing at class level. Add this annotation to the class @Component("calculateInterestService") or simply @Component.

@Component("calculateInterestService")
public class CalculateInterestService implements JavaDelegate {
	public void execute(DelegateExecution delegate) throws Exception {
		System.out.println("Spring Bean invoked.");
	}
}

https://docs.camunda.org/manual/7.12/user-guide/process-engine/delegation-code/

thank you but the error persist

Delegate Expression ‘${calculateInterestService}’ did neither resolve to an implementation of ‘interface org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior’ nor ‘interface org.camunda.bpm.engine.delegate.JavaDelegate’

note:
the sample on the camunda site for that tutorial does NOT have that annotation nor does it mention adding it in the tutorial!
also if the process engine cant find the bpmn i think the error would be different. If i intentionally mess with that value (delegateExpression="${fakeService}) the error i get is:

Unknown property used in expression: ${fakeService}

Then you might have misconfigured the delegates in the BPMN model.

the bpmn is copied from the downloaded sample

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="_DdZocL47EeOQo_IRkjDF6w" exporter="camunda modeler" exporterVersion="2.5.0" targetNamespace="http://camunda.org/schema/1.0/bpmn">
  <bpmn2:process id="loanApproval" name="Loan Approval" isExecutable="true">
    <bpmn2:startEvent id="StartEvent_1" name="Loan Request Received">
      <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:serviceTask id="ServiceTask_1" camunda:delegateExpression="${calculateInterestService}" name="Calculate Interest">
      <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent_1" targetRef="ServiceTask_1"/>
    <bpmn2:endEvent id="EndEvent_1" name="Loan Approved">
      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="ServiceTask_1" targetRef="EndEvent_1"/>
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="loanApproval">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_3" bpmnElement="StartEvent_1">
        <dc:Bounds height="36.0" width="36.0" x="184.0" y="164.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="_BPMNShape_ServiceTask_5" bpmnElement="ServiceTask_1">
        <dc:Bounds height="80.0" width="100.0" x="270.0" y="142.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_3" targetElement="_BPMNShape_ServiceTask_5">
        <di:waypoint xsi:type="dc:Point" x="220.0" y="182.0"/>
        <di:waypoint xsi:type="dc:Point" x="270.0" y="182.0"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="_BPMNShape_EndEvent_3" bpmnElement="EndEvent_1">
        <dc:Bounds height="36.0" width="36.0" x="420.0" y="164.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ServiceTask_5" targetElement="_BPMNShape_EndEvent_3">
        <di:waypoint xsi:type="dc:Point" x="370.0" y="182.0"/>
        <di:waypoint xsi:type="dc:Point" x="420.0" y="182.0"/>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Had bad logic in my application context

  @Bean
  public LoanApplicationContext calculateInterestService() {
    return new LoanApplicationContext ();
  }

should have been

  @Bean
  public CalculateInterestService calculateInterestService() {
    return new CalculateInterestService ();
  }