Guice, JDBC и управление соединениями с базой данных

Я пытаюсь создать пример проекта, изучая Guice, который использует JDBC для чтения / записи в базу данных SQL. Однако, после многих лет использования Spring и отвлечения его от обработки соединений и транзакций, я изо всех сил стараюсь сделать это концептуально.

Я хотел бы иметь службу, которая запускает и останавливает транзакцию и вызывает многочисленные репозитории, которые повторно используют одно и то же соединение и участвуют в одной транзакции. Мои вопросы:

Где я могу создать свой источник данных?Как мне предоставить репозиториям доступ к соединению? (ThreadLocal?)Лучший способ управления транзакцией (Создание перехватчика для аннотации?)

Код ниже показывает, как я буду делать это весной. JdbcOperations, внедренный в каждый репозиторий, будет иметь доступ к соединению, связанному с активной транзакцией.

Я не смог найти много учебных пособий, которые покрывают это, кроме тех, которые показывают создание перехватчиков для транзакций.

Я рад, что продолжаю использовать Spring, поскольку он очень хорошо работает в моих проектах, но я хотел бы знать, как это сделать в чистом Guice и JBBC (без JPA / Hibernate / Warp / Reusing Spring)

@Service
public class MyService implements MyInterface {

  @Autowired
  private RepositoryA repositoryA;
  @Autowired
  private RepositoryB repositoryB;
  @Autowired
  private RepositoryC repositoryC; 

  @Override
  @Transactional
  public void doSomeWork() {
    this.repositoryA.someInsert();
    this.repositoryB.someUpdate();
    this.repositoryC.someSelect();  
  }    
}

@Repository
public class MyRepositoryA implements RepositoryA {

  @Autowired
  private JdbcOperations jdbcOperations;

  @Override
  public void someInsert() {
    //use jdbcOperations to perform an insert
  }
}

@Repository
public class MyRepositoryB implements RepositoryB {

  @Autowired
  private JdbcOperations jdbcOperations;

  @Override
  public void someUpdate() {
    //use jdbcOperations to perform an update
  }
}

@Repository
public class MyRepositoryC implements RepositoryC {

  @Autowired
  private JdbcOperations jdbcOperations;

  @Override
  public String someSelect() {
    //use jdbcOperations to perform a select and use a RowMapper to produce results
    return "select result";
  }
}

Ответы на вопрос(4)

Ваш ответ на вопрос