Singleton - trabalhando com camadas e getinstance

Olá, tudo bem ?

Estou tentando fazer um projeto utilizando apenas uma instância, que esteja em camadas, separei da seguinte forma:

controller

AnotacoesController.java

DAO

AnotacoesDAO.java

model

Anotacoes.java

repository

IAnotacoes.java

service

AnotacoesService.java

Abaixo a classe modelo:

package model;

public class Anotacoes {
	
	private String titulo;
	private String mensagem;
	
		public Anotacoes(String titulo, String mensagem) {
		this.titulo = titulo;
		this.mensagem = mensagem;
	}
		
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public String getMensagem() {
		return mensagem;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
}

Abaixo classe controller

package controller;

import model.Anotacoes;
import service.AnotacoesService;

public class AnotacoesController {
	
	private static AnotacoesController anotacoesController;
	private AnotacoesService anotacoesService = AnotacoesService.getInstance();
	
	private AnotacoesController() {
		
	}
	
	public static AnotacoesController getInstance() {
		if(anotacoesController == null)
			anotacoesController = new AnotacoesController();
		
		return anotacoesController;
	}
	
	public Anotacoes salvar() {
		Anotacoes anotacoes = new Anotacoes("Primeira Anotação","Esse é o primeiro texto");
		return anotacoesService.salvar(anotacoes);
	}
}

Abaixo service:

package service;

import DAO.AnotacoesDAO;
import model.Anotacoes;
import repository.IAnotacoes;

public class AnotacoesService {
	
	private static AnotacoesService anotacoesService;
	private IAnotacoes iAnotacoes = AnotacoesDAO.getInstance();
	
	private AnotacoesService() {
		
	}
	
	public static AnotacoesService getInstance() {
		if(anotacoesService == null)
			anotacoesService = new AnotacoesService();
		
		return anotacoesService;
	}
	
	public Anotacoes salvar(Anotacoes anotacoes) {
		return this.iAnotacoes.salvar(anotacoes); 
	}
}

Vou fazer uma classe com um menu impresso no console para fazer o input pelo usuário.

Estou com dificuldade em entender como o processo acontece e como o objeto chega até a ultima camada para salvar no banco.

Como o mesmo objeto passa pelas classes, controller > service > dao e então mandar pro banco.

Pesquisando consegui entender como fazer a conexão ao banco postgre e fazer o insert.

Não entendi como quando eu chamar o método salvar ele vai fazer pra passar classe por classe nas camadas.

Srs não sei se expliquei direto ou me fiz entender.
Quero entender, eu até achei código funcionando mas continuei com a mesma duvida, quero tentar entender pra não fazer novamente essas perguntas.

Resolvido